首页 > 编程语言 > 详细

冒泡排序

时间:2020-07-16 15:54:08      阅读:53      评论:0      收藏:0      [点我收藏+]

冒泡排序

交换排序

  1. 冒泡排序
  2. 快速排序

基于“交换“的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置

定义

从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即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次

稳定性:稳定

冒泡排序是否适用于链表?(自己实现)

技术分享图片

知识回顾

技术分享图片

冒泡排序

原文:https://www.cnblogs.com/jev-0987/p/13322150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!