zoukankan      html  css  js  c++  java
  • 排序算法——冒泡排序

     

    在前面的文章中,已经向大家介绍了插入排序和选择排序两种基本的排序方法。今天要介绍的是另外一种排序方法——冒泡排序。

    思想

    同之前介绍的两种排序方式一样,冒泡排序也是最简单最基本的排序方法之一。冒泡排序的思想很简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。

    举例分析说明一下,如下数据:

    2 7 4 6 9 1 首先比较最后两个数字,发现1比9小,于是前移

    2 7 4 6 1 9 然后比较6和1

    2 7 4 1 6 9 继续前移,然后是4和1

    2 7 1 4 6 9 7和1比较

    2 1 7 4 6 9 2和1

    1 2 7 4 6 9 至此,第一趟冒泡过程完成,最小的元素1被移到第一个,不再参与后面的排序过程。下一趟冒泡过程同理,比较6和9,以此类推,最终得到结果。

    代码

    复制代码
            cout << "bubble sort:" << endl;
    printline("before sort:", v);
    for (int i=0; i<v.size(); i++){
    int temp = 0;
    for(int j=v.size()-1; j>0; j--){
    if (v[j] < v[j-1]){
    temp = v[j];
    v[j] = v[j-1];
    v[j-1] = temp;
    }
    }
    }
    printline("after sort:",v);
    复制代码

    分析

    因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。以此本算法的时间复杂度还是O(n*n),也不能算是一个高效的算法。

    细心分析不难发现,本算法还有可以优化的空间,若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此, 在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序 结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。这样可以减少不必要的比较。代码如下

    复制代码
    int bubble_sort(vector<int> &v){
    cout << "bubble sort:" << endl;
    printline("before sort:", v);
    bool exchange;
    for (int i=0; i<v.size(); i++){
    int temp = 0;
    exchange = false;
    for(int j=v.size()-1; j>0; j--){
    if (v[j] < v[j-1]){
    temp = v[j];
    v[j] = v[j-1];
    v[j-1] = temp;
    exchange = true;
    }
    }
    if (!exchange){
    break;
    }
    }
    printline("after sort:",v);
    }
    复制代码

    以上就是对冒泡排序的一个简单说明和讲解,希望可以对大家有所启发和帮助。

    之后会介绍一些高效的排序算法,敬请期待。

  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/bb3q/p/4497205.html
Copyright © 2011-2022 走看看