• 冒泡排序&排序算法简介



    根据排序过程中的主要操作,可以将内排序分为以下几种:

      插入排序:直接插入排序,希尔排序(改进的直接插入排序)

      交换排序:冒泡排序,快速排序(改进的冒泡排序)

      选择排序:简单选择排序,堆排序(改进的简单选择排序)

      归并排序:归并排序

    本次主要介绍冒泡排序,接下来,将会陆续介绍以上各种排序算法,以代码加图示的方法来展示上述排序算法。

    冒泡排序的基本思想:两两比较相邻记录的关键字,若反序则交换位置,直到没有反序的记录为止。

    一. 冒泡排序

    以顺序表L = {9,1,5,8,3}为例,length = 5。代码如下所示:

     1 //冒泡排序法
     2 //顺序表L中共有length个记录
     3 void BubbleSort1(SqList* L)
     4 {
     5     int i, j;
     6 
     7     //只需要循环(length-1)次,最后一次(i=length时)只剩下一个元素,一定为最大值
     8     for (i = 1; i < L->length; i++)//循环结束后,第i个关键字为剩余待排元素的最小值
     9     {
    10         //j的初始值为length-1,因为比较时是对r[j]和r[j+1]进行比较
    11         for (j = L->length - 1; j >= i; j--)//将剩下的(length-i)个记录进行比较
    12         {
    13             //从后往前两两比较相邻记录的关键字,若反序,则交换
    14             if (L->r[j] > L->r[j + 1])//前者大于后者
    15                 swap(L, j, j + 1);
    16         }
    17     }
    18 }

    顺序表中的记录变化如下所示:

    二. 冒泡排序优化

    以顺序表L = {2,1,3,4,5}为例,length = 5。

    对于该顺序表,当 i = 2 时,没有数据交换,此时,序列已经有序,若采用冒泡排序,则之后的循环判断都是无意义的,所以我们加入了标记变量 flag 对冒泡排序进行优化。

    代码如下所示:

     1 //冒泡排序优化
     2 //当剩余数列已经有序时,则不需要在对后面的循环进行判断
     3 //增加一个标记变量flag来实现
     4 void BubbleSort2(SqList* L)
     5 {
     6     int i,j;
     7     bool flag = true;
     8 
     9     //flag为false则退出循环
    10     //表明在剩余的序列中未进行元素位置的交换
    11     for (i = 1; i < L->length && flag; i++)
    12     {
    13         flag = false;//初始值为false
    14     
    15         for (j = L->length - 1; j >= i; j--)
    16         {
    17             if (L->r[j] > L->r[j + 1])
    18             {
    19                 swap(L, j, j+1);
    20                 flag = true;//只要有一次数据交换,则flag为true
    21             }
    22         }
    23     }  
    24 }

    顺序表中的记录变化如下所示:

    相关链接:

    简单选择排序 https://www.cnblogs.com/yongjin-hou/p/13859148.html
    直接插入排序 https://www.cnblogs.com/yongjin-hou/p/13861458.html
    希尔排序 https://www.cnblogs.com/yongjin-hou/p/13866344.html

    堆排序 https://www.cnblogs.com/yongjin-hou/p/13873770.html

    归并排序 https://www.cnblogs.com/yongjin-hou/p/13921147.html

    快速排序 https://www.cnblogs.com/yongjin-hou/p/13950379.html

    参考书籍:程杰 著,《大话数据结构》,清华大学出版社。

  • 相关阅读:
    Flask中的CBV以及正则表达式
    Flask中的渲染变量
    Flask中的request和response
    Flask中的cookie和session
    Flask的请求扩展
    [NOIP2000] 提高组 洛谷P1018 乘积最大
    [NOIP2000] 提高组 洛谷P1017 进制转换
    洛谷P2563 [AHOI2001]质数和分解
    巴蜀4384 -- 【模拟试题】作诗(Poetize)
    [NOIP1999] 提高组 洛谷P1016 旅行家的预算
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/13858510.html
Copyright © 2020-2023  润新知