冒泡排序相邻两个元素排序,把最大或者最小的元素排在数据的某一侧,是一种稳定排序。
void bubbleSort(vector<int>& nums> {
int len = nums.size();
for (int i = 0; i < nums - 1; i++) {/*i < nums - 1;如果是i < nums,当i= nums -1时,j < 0。这个循环没有必要,所以要设置i < nums - 1*/
for (int j = 0; j < nums - i - 1; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums[j], nums[j + 1]);
}
}
}
}
优化版:假设,我们已经进行了一次排序。发现这一次排序完,没有进行任何元素变动。则可以确定数组内部已经完成排序,就可以跳出循环。
void bubbleSort(vector<int>& nums> {
int len = nums.size();
bool flag = false;
for (int i = 0; i < nums - 1; i++) {
flag = false;
for (int j = 0; j < nums - i - 1; j++) {
if (nums[j] > nums[j + 1]) {
flag = true
swap(nums[j], nums[j + 1]);
}
}
if (!flag) {
break;
}
}
}