●第一步
从左到右,两两比较,将最大的数放在数组的最后一位(即下标n-1的位置)
●第二步
采用相同的方法,再次遍历,将第二大的数,放在数组倒数第二的位置(即n-2的位置),以此类推,直至数组有序。
冒泡排序的时间复杂度分析:N个数排序
把最大的放到最后N-1…N-2…2…1…等差数列
(1+N)N/2 ===> aN"2 +bN + c
保留高阶项,忽略低阶项,不要前面的系数
●优化:
当数组在整个遍历过程中,没有发生交换,说明待排序数组已经是有序的了,此时可以直接结束排序过程。
//冒泡排序
void bubbleSort(std::vector<int>& nums) {
int n = nums.size();
for (int j = n; j > 0; j--) {
bool flag = true;
for (int i = 0; i < j - 1; i++) {
//需要交换,代表是无序的
if (nums[i] > nums[i + 1]) {
flag = false;
std::swap(nums[i], nums[i + 1]);
}
}
if (flag == true) {
return;
}
}
}