国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實現(xiàn)經(jīng)典排序算法之冒泡排序

2019-11-19 18:14:09
字體:
供稿:網(wǎng)友

冒泡排序可謂是最經(jīng)典的排序算法了,它是基于比較的排序算法,時間復(fù)雜度為O(n^2),其優(yōu)點是實現(xiàn)簡單,n較小時性能較好。

1)算法原理
       相鄰的數(shù)據(jù)進行兩兩比較,小數(shù)放在前面,大數(shù)放在后面,這樣一趟下來,最小的數(shù)就被排在了第一位,第二趟也是如此,如此類推,直到所有的數(shù)據(jù)排序完成。

2)算法描述
       <1>比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
       <2>對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對,這樣在最后的元素應(yīng)該會是最大的數(shù);
       <3>針對所有的元素重復(fù)以上的步驟,除了最后一個;
       <4>重復(fù)步驟1~3,直到排序完成。
3)javascript代碼實現(xiàn)

function bubbleSort(arr){    var len = arr.length;    for (var i = 0; i < len; i++) {      for(var j = 0; j < len - i -1; j++){        if(arr[j]>arr[j+1]){ //相鄰元素進行對比          var temp = arr[j+1];//交換元素          arr[j+1] = arr[j];          arr[j] = temp;        }      }    }    return arr;//返回數(shù)組  }    var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];//調(diào)用排序算法  console.log(bubbleSort(arr));//控制臺輸出結(jié)果  

        這個算法是最基本的實現(xiàn)方法,接著進行改進這個算法,通過設(shè)置一個標志性的變量position,用于記錄每趟排序中最后一次進行交換的位置。因為position位置之后的記錄都已經(jīng)排序好了,所以進行下一趟排序時只需要掃描到position的位置就好。
改進之后的算法如下:

function bubbleSort2(arr){    var i = arr.length -1;//開始時,掃描的最后位置    while(i>0){      var position = 0;//標志性變量,表示當(dāng)前排序中交換的位置      for(var j = 0; j < i; j ++){        if(arr[j]>arr[j+1]){          position = j;          var temp = arr[j+1];          arr[j+1] = arr[j];          arr[j] = temp;        }      }      i = position;    }    return arr;  }    var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];  console.log(bubbleSort2(arr));  

      傳統(tǒng)冒泡排序中每一趟排序操作只能找到一個最大值或最小值,我們考慮利用在每趟排序中進行正向和反向兩遍冒泡的方法一次可以得到兩個最終值(最大者和最小者) , 從而使排序趟數(shù)幾乎減少了一半。
改進之后的算法如下:

function bubbleSort3(arr){    var low = 0;    var high = arr.length-1;    var temp;    while(low < high){//找到最大值      for(var j = low ; j < high ; j++){        if (arr[j]> arr[j+1]) {               temp = arr[j+1];          arr[j+1] = arr[j];          arr[j] = temp;         }      }      --high;//修改high值,向前移一位    }    while(low > high){//找到最小值      for(var j = high ;j > low; j--){        if (arr[j]> arr[j+1]) {               temp = arr[j+1];          arr[j+1] = arr[j];          arr[j] = temp;         }      }      ++low;//修改low值,往后移動一位    }    return arr;  }  var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];  console.log(bubbleSort3(arr));  

4)算法分析

      最佳情況:T(n) = O(n)
      最差情況:T(n) = O(n2)
      平均情況:T(n) = O(n2)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泰宁县| 富平县| 蒙城县| 内黄县| 炎陵县| 轮台县| 宝清县| 临城县| 龙山县| 岳阳市| 古交市| 达孜县| 临城县| 福清市| 南川市| 曲靖市| 鸡东县| 砚山县| 巴南区| 万年县| 秦皇岛市| 安塞县| 准格尔旗| 青海省| 涡阳县| 鱼台县| 都安| 洪洞县| 宣城市| 辉县市| 舞阳县| 类乌齐县| 原阳县| 星座| 永定县| 淮北市| 达日县| 芜湖市| 茂名市| 旬邑县| 文安县|