自学内容网 自学内容网

排序算法:冒泡排序

冒泡排序

原理:每次比较相邻的两个元素,然后在满足一定条件情况交换相邻两个元素

5  3  1  4  2

一趟冒泡(当前区间内,最大的一定会排在最后)

第一趟冒泡

i  i+1

3  5  1  4  2

3  1  5  4  2 

3  1  4  5  2

3  1  4  2  5

第二趟冒泡

3  1  4  2  5

1  3  4  2  5

1  3  2  4  5

第三趟冒泡

1  3  2  4  5

1  2  3  4  5

第四趟冒泡

i  i+1

1  2  3  4  5

冒泡排序

时间复杂度(取决于运算的次数):O(n^2)

空间复杂度(取决于额外开辟的空间):O(1)

稳定性:稳定

void bubbleSort(int a[], int n) {
//外层j控制的每次需要冒泡的长度(每趟过后都会排好一个,长度--)
for (int j  = n  - 1; j  >= 1; j--) {
//优化:当某一趟冒泡的时候已经有序,提前跳出循环
bool flag  = true;//假设当前序列已经有序了
//内层i遍历当前区间,进行冒泡操作(当前区间的最后一个元素一定会排好)
for (int i  = 0; i  < j; i++) {
if (a[i] > a[i  + 1]) {//冒泡操作(如果前者大于后者)
swap(a[i], a[i  + 1]);//交换两个元素
flag  = false;//证明此时序列可能还是无序的
}
}
if (flag  == true) break;//证明此时序列是真的有序
}
}


原文地址:https://blog.csdn.net/m0_61990249/article/details/136176011

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!