zoukankan      html  css  js  c++  java
  • (排序)冒泡排序的三种实现

    主要内容:

    1、冒泡排序

    2、冒泡排序实现1

    3、冒泡排序实现2

    4、冒泡排序实现3

    一、冒泡排序的原理

    冒泡排序是简单的一种排序方法,效率低下,复杂度为O(n^2),其具体的算法流程如下:

    1、算法需要对数组遍历n-1遍;

    2、在每一次遍历中,比较前后相邻元素的大小,如果第一个比第二个大,则交换他们,这样第一次遍历之后数组最后一个值就是最大值;

    3、依次重复上面的步骤,就可以得到升序排序的数组。

    复杂度分析:

    最差时间复杂度(数组从大到小,交换次数):(n-1)+(n-2)+……+1=n*(n-1)/2=O(n^2)

    最好时间复杂度(数组从小到大,交换次数):0

    二、冒泡排序的实现1

    如上述原理:

    // naive bubbleSort
    void bubbleSort1(int a[],int n){
        int tmp;
    
        for(int i=1;i<=n-1;i++){
            for(int j=0;j<n-i;j++){
                if(a[j]>a[j+1]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
        }
    }

    三、冒泡排序的实现2

    设置一个标识,如果在某一趟遍历中没有发生交换,说明排序已经完成,即算法完成。

    // set flag to indicate which step to stop
    void bubbleSort2(int a[],int n){
        int tmp;
        bool change=true;
        for(int i=1;i<=n-1 && change;i++){
            change=false;
            for(int j=0;j<n-i;j++){
                if(a[j]>a[j+1]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    change=true;
                }
            }
        }
    }

    四、冒泡排序的实现3

    如果数组有100个数,仅前面10个无序,后面90个有序,那么第一趟遍历后,最后发生交换的位置必定小于10,记录下这个位置,第二次遍历只需要从数组头部遍历到这个位置即可。

    // set flag to indicate what next step should begin from
    void bubbleSort3(int a[],int n){
        int tmp;
        bool change=true;
        int flag=n-1;
        int k;
        for(int i=1;i<=n-1 && change;i++){
            change=false;
            k=flag;
            for(int j=0;j<k;j++){
                if(a[j]>a[j+1]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    change=true;
                    flag=j;
                }
            }
        }
    }
  • 相关阅读:
    WinCE 与通讯模块
    6174问题
    阶乘因式分解(一)
    三个数从小到大排序
    公约数和公倍数
    水仙花数
    韩信点兵
    5个数求最值
    求转置矩阵问题
    孪生素数问题
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4456491.html
Copyright © 2011-2022 走看看