冒泡排序
冒泡排序
交换排序:
- 冒泡排序
- 快速排序
基于“交换“的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置
定义
从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换他们,直到序列比较完,称这样过程为”一趟“冒泡排序
操作示意
两个两个比较,让最小的到前面去。
最小的两个已经到前面去了。
如果两个相同,不换位置,为了稳定性。
第五趟结束后,整体已经有序了。。
代码
//交换 void swap(int &a,int &b){ int temp = a; a = b; b = temp; } //冒泡排序 void BubbleSort(int A[],int n){ for(int i=0;i<n-1;i++){ bool flag = false; //表示本趟冒泡是否发生交换的标志 for(int j=n-1;j>i;j--) //一趟冒泡过程 if(A[j-1]>A[j]){ //若为逆序 swap(A[j-1],A[j]); //交换 flag = true; } if(flag == false) return; //本趟遍历后没有发生交换,说明表已经有序 } }
算法性能分析
空间复杂度:O(1)
最好情况(有序):12346578,比较次数=n-1;交换次数=0;最好时间复杂度=O(n)
最坏情况(逆序):87654321,比较次数=n(n-1)/2=交换次数,最坏时间复杂度=O(n^2)
平均时间复杂度=O(n^2)
注意:每次交换都需要移动元素3次
稳定性:稳定
冒泡排序是否适用于链表?(自己实现)
知识回顾
本文作者:Jev_0987
本文链接:https://www.cnblogs.com/jev-0987/p/13322150.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步