冒泡排序c++代码_排序 --- 冒泡排序

既然写了计组思来想去便打算把数据结构也写下来,写的时候总是发现看的时候无法发现的问题,受益良多。

交换排序的基本思想: exchange until sorted

顺序,分支,循环

(注意伪代码的熟悉

下面介绍两种交换算法

  • 冒泡排序(Bubble sort)

首先进行联想,用一个图进行辅助联想:

c67bafbafd626990bc46e6f0fd58340f.png
水冒泡过程

图片顶部是数组的begin,底部理解为数组end。冒泡排序的过程就是最下面的水滴往上冒泡的过程,最后最小的气泡在最上面,最大的气泡在最底下。(重力

我们把整个过程进行抽象和精炼下出如下冒泡排序的算法思路:

1. 冒泡排序从低往上进行exchange,根据空间的连续性(滑稽,首先进行比较的是这个泡泡最接近的上面的泡泡,将某个泡泡送到他最终的位置(因此冒泡排序具有全局有序

2.两个气泡相互交换,小的气泡(权值小的)继续进行冒泡的过程直到到达了规定位置
for(从0开始到数组末端-1(最后就一个数字,选择每次冒泡的终点位置){
    for(从队尾末端(思考为什么是末端)开始进行交换过程,直到到达指定位置){
        if(从下冒上来的泡泡小,就可以进行交换){
            swap;
        }
    }
}

下面可以进行两个练习:

  1. 写出 冒泡排序算法的完全代码
  2. 分析冒泡排序过程中的冗余过程,考虑如何进行优化(tip:及时中断)

Bubble sort 算法分析

ps:对于已经优化的排序算法进行分析

  • 最好

数组已经为正序,一遍扫描就好了,进行n-1次比较,不需要移动故:

(C是关键词进行比较的次数,M是进行移动的次数)

所以bubble sort 的最好时间复杂度是

  • 最坏

数组为逆序,进行n - 1 次排序,每次排序需要进行

次排序,每次排序进行3次元素的移动(swap)故:

所以bubble sort 的最坏时间复杂度是

  • 平均

冒泡排序的平均情况分析较为复杂,但是可以知道平均的排序趟数仍为

,所以平均比较次数仍为
,所以易知平均时间复杂度为
。冒泡排序的平均时间复杂度比直接排序相对坏一些。

当然 i > j 且数组R[i] = R[j]时,由于他们之间没有逆序,所以不会进行交换,所以冒泡排序是稳定的排序算法。

前面思考题的答案,注释的是第二问的优化

void Bubble_sort(int a[], int n){
    int i, j;
    //bool exchange;
    for (i = 0; i < n - 1; ++i)
    {
        //exchange = false;
        for(j = n - 1; j > i; ++j){
            if (a[j] > a[j - 1])
            {
                swap(a[j], a[j - 1]);
                //exchange = true;
            }
            
        }
        //if(!exchange)return;
    }
    
}
Talk is easy, show me the code. XD
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值