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

    排序算法的相关概念

    1、内部排序和外部排序

      内部排序:整个排序过程完全在内存中进行;

      外部排序:排序需要借助外部存储设备才能完成。

    2、算法的稳定性

      相同关键字的领先关系在排序过程中不发生变活,则所用的排序方法是稳定的。

    算法思想

    从上往下扫描整个待排序数组,若相邻的两个数逆序,则交换位置(让较大的数沉下去,让较小的数冒泡上来)。

    稳定性:稳定,平均算法复杂度:0(n2

    function bubbleSort(arr,len){
        //冒泡过程需要要进行n-1次
        for(var i = 1;i <= len -1;i++){
            //第i次进行后最后i项排好,只需要比较前len - i项
            for(var j = 1;j <= len - i;j++){
                //若相邻两项逆序,则交换位置
                if(arr[j-1] >arr[j]){
                    var temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    优化冒泡排序

    设置一个flag,每一趟将flag设置成false,如果这一趟发生了交换,则将flag设置为true。如果有一趟没有发生交换,说明排序已经完成。冒泡过程最多进行 n-1 次。

    function bubbleSort(arr,len){
        var flag = true;
        for(var i = 1;i <= len -1 && flag;i++){
            flag = false;
            for(var j = 1;j <= len - i;j++){
                //若相邻两项逆序,则交换位置,并将flag设置为true
                if(arr[j-1] >arr[j]){
                    var temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                    flag = true;
                }
            }
        }
        return arr;
    }

    再一次优化

    设置一个flag,每一趟将flag设置为0,若某一趟在某一个位置发生了交换,就将flag立在这个位置,说明这个位置以后的都已经排好了,只需要对这个位置之前的数进行排序。

    function bubbleSort(arr,len){
        var flag = len,n = flag;
        while(flag > 0){
            n = flag;
            flag = 0;
            for(var j = 1;j < n;j++){
                if(arr[j-1] >arr[j]){
                    var temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                    flag = j;
                }
            }
        }
        return arr;
    }
  • 相关阅读:
    Navicat连接mysql1862错误your password has expired.To log in you must change itusing a client that supports expired passwords
    机器学习听课 | 目录 | 00
    Git实战 | 其他 | 04
    练手SQL数据 | 目录 | 00
    练手SQL数据 | 区域自关联 | 02
    蓝桥杯训练 | 数学和简单DP | 03
    Python基础 | linux下Python的安装 | 03
    Java基础 | 目录 | 00
    初级-MySQL经典练习题及答案,常用SQL语句练习50题
    MYSQL必知必会-SQL语句查询
  • 原文地址:https://www.cnblogs.com/3yleaves/p/9390630.html
Copyright © 2011-2022 走看看