数据结构复习指导之交换排序(冒泡排序,快速排序)

目录

交换排序

复习提示

1.冒泡排序

1.1基本思想

1.2算法代码

1.3性能分析

2.快速排序

2.1基本思想

2.2算法代码

2.3性能分析


交换排序

复习提示

所谓交换,是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。
基于交换的排序算法很多,本书主要介绍冒泡排序快速排序

其中冒泡排序算法比较简单,一般很少直接考查,通常会重点考查快速排序算法的相关内容

1.冒泡排序

1.1基本思想

冒泡排序的基本思想是:

  • 从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。
  • 我们称它为第一趟冒泡,结果是将最小的元素交换到待排序列的第一个位置(或将最大的元素交换到待排序列的最后一个位置),
  • 关键字最小的元素如气泡一般逐渐往上“漂浮”至“水面”(或关键字最大的元素如石头一般下沉至水底)。
  • 下一趟冒泡时,前一趟确定的最小元素不再参与比较,每趟冒泡的结果是把序列中的最小元素(或最大元素)放到了序列的最终位置……这样最多做n-1趟冒泡就能把所有元素排好序。

图 8.3所示为冒泡排序的过程,

第一趟冒泡时:

  • 27<\overline{49},不交换;
  • 13<27,不交换;
  • 76>13,交换;
  • 97>13,交换;
  • 65>13,交换;
  • 38>13,交换;
  • 49>13,交换。

通过第一趟冒泡后,最小元素已交换到第一个位置,也是它的最终位置。

第二趟冒泡时对剩余子序列采用同样方法进行排序,如此重复,到第五趟结束后没有发生交换,说明表已有序,冒泡排序结束。

1.2算法代码

冒泡排序算法的代码如下:

void BubbleSort(ElemType 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]); //使用封装的 swap 函数交换
                flag=true;
            }
        if(flag==false)
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心碎烤肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值