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;
                }
            }
        }
    }
  • 相关阅读:
    Jenkins中构建Testcomplete项目的方法介绍
    抖音批量,批量运营抖音_不要迷恋我_【单月抖音变现7000万】教程
    java 读取 excel 表格内容
    .NET Core 2.1中的分层编译(预览)
    Windows10上使用Linux子系统(WSL)
    swagger上传文件并支持jwt认证
    .NET微服务 容器化.NET应用架构指南(支持.NET Core2)
    用C#编写Linux守护进程
    安装mysql后运行.net程序出错
    2018 你好
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4456491.html
Copyright © 2011-2022 走看看