国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

排序算法——JS算法實現

tianlai / 1858人閱讀

摘要:待排序的記錄序列中可能存在兩個或兩個以上的關鍵字相等的記錄,且在排序前在前面即,若在排序后的序列中任然在前面,則稱所用的排序算法是穩定的。基數排序留各種排序算法比較以上用到的函數函數返回生成的數組結束

排序 Sorting 排序基本概念

排序是計算機程序設計中的一種重要操作,他的功能是將一個數據元素(或記錄)的任意排列,重新排列成一個按關鍵字有序的序列。
待排序的記錄序列中可能存在兩個或兩個以上的關鍵字相等的記錄,且在排序前Ri在Rj前面(即i是穩定的。

如果按照排序過程中依據的不同原則對內部排序進行分類,則可分為

插入排序

交換排序(快速排序)

選擇排序

歸并排序

基數排序

如果按照工作量來區分可以分為3類

簡單的排序算法,時間復雜度為O(n2)

先進的排序算法,時間復雜度為O(nlogn)

基數排序,時間復雜度為O(d*n)

通常,在排序的過程中需要進行下列兩種基本操作,(其中第二種操作可以通過改變記錄的存儲方式來予以避免)

比較兩個關鍵字大小

將記錄從一個位置移動至另一個位置
待排序的記錄序列可有下列3種存儲方式。

存儲在地址連續的一組存儲單元上。

靜態鏈表,記錄之間的次序由指針指示,則實現排序不需要移動記錄

待排序記錄存儲在一組地址連續的存儲單元內,同時,另外設一個指示各個記錄存儲位置的地址向量,在排序過程中不移動記錄本身,而是移動地址向量
中這些記錄的“地址”,在排序結束后再按照地址向量中的值調整記錄的存儲位置。

插入排序 直接插入排序 O(n2)

最為簡單的一種排序,基本操作為將一個記錄插入到已經排好序的有序表中,從而得到一個新的,記錄增1的有序表。

//直接插入排序,更為高效的應該是折半插入排序?≥
function insertSort (Arr) {
  if (Arr.length <= 1) {
    return Arr;
  }
  var temp;

  for (var i = 1; i < Arr.length; i++) { //從1開始,第一個不用排序
    temp = Arr[i]; //用temp緩存待插入的元素
    for (var j = i; j >= 0; j--) {
      if (temp < Arr[j]) {
        Arr[j + 1] = Arr[j]; //當Arr[i] Arr[j]) {
        break; //第一種:如果找到了一個比Arr[i]小的Arr[j],則退出循環,結束
      }
      //第二種,當j循環,結束
    }
    //結束j循環,將temp中緩存的待插入元素插入
    Arr[j + 1] = temp;
  }

}; //insert結束
其他插入排序

折半插入排序 O(n2) 通過減少比較關鍵字大小次數來優化排序算法。

2路插入排序

表插入排序

希爾排序 O(n3/2)

又被稱為"縮小增量排序"。基本思想:先將整個待排記錄序列分割成若干個子序列分別進行直接插入排序,待整個序列中的記錄
“基本有序”時,再對全體記錄進行一次直接插入排序。

function shellSort(Arr) {
  var gap = Math.floor(Arr.length / 2);
  while (gap > 0) {
    for (var i = 0; i < Arr.length; i++) {
      var temp = Arr[i];
      for (var j = i; j >= gap && Arr[j - gap] > temp; j -= gap) {
        Arr[j] = Arr[j - gap];
      }
      Arr[j] = temp;
    }
    gap = Math.floor(gap / 2);
  }
  return Arr;
}; //shell結束
快速排序 起泡排序 bubble sort
// 起泡排序,
function bibbleSort(Arr) {
  for (var i = Arr.length - 1; i >= 0; i--) {
    for (var j = 0; j < i; j++) {
      if (Arr[j] > Arr[j + 1]) {
        swap(j, j + 1, Arr);
      }
    }
  }
  return Arr;
};
快速排序 quick sort
// 一趟快速排序的算法是
// 1.設置初始值x=0,y=n-1,令keyValuey=Arr[0],2.從Arr[y]開始向前遍歷,如果keyValue>Arr[y],則將Arr[i]和Arr[y]交換,3.從Arr[x]向后遍歷,當keyValue
選擇排序
簡單的選擇排序
//選擇排序 從待排序的數組中找出最小值放在最前面
function selectSort(Arr) {
  for (var i = 0; i < Arr.length; i++) {
    for (var j = i; j < Arr.length; j++) {
      if (Arr[i] > Arr[j]) {
        swap(Arr, i, j);
      }
    }
  }
  return Arr;
}; //select結束
樹形選擇排序

堆排序 heap sort

留!!!

歸并排序 merging sort O(m+n)

假設初始序列含義n個記錄,則可以看成是n個有序的子序列,每個子序列的長度為1,然后兩兩歸并,等到Math.floor(n/2)個長度為2或1的有序子序列,再兩兩歸并,如此重復,直至得到一個長度為n的有序序列為止。

function mergeSort (){
    var merge=function(left,right){
        var final=[];
        while(left.length&&right.length){
            final.push(left[0]<=right[0]?left.shift():right.shift());
        }
        return final.concat(left.concat(right));
    };

    var len=this.length;
    if(len<2){
        return this;
    }

    var mid=parseInt(len/2),
        _left=this.slice(0,mid),
        _right=this.slice(mid);
    return merge(_left.mergeSort(),_right.mergeSort());
};
基數排序 radix Sorting

各種排序算法比較 以上用到的swap函數
//swap函數
function swap(Arr, firPos, secPos) {
  var temp = Arr[firPos];
  Arr[firPos] = Arr[secPos];
  Arr[secPos] = temp;
  return Arr; //返回生成的數組
} //swap結束

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91630.html

相關文章

  • 使用JS實現三種基本的排序算法以及三種算法的比較

    摘要:介紹排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法冒泡排序選擇排序插入排序,在文章的后面我會對三種算法的速度進行對比。 1.介紹 排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法:冒泡排序、選擇排序、插入排序,在文章的后面我會對三種算法的速度進行對比。 2.冒泡排序 冒泡排序其名來源與其算法實現,會使得數組中的元素一個個從數組一端漂...

    wh469012917 評論0 收藏0
  • 排序算法分析總結(附js實現

    摘要:本文對一些排序算法進行了簡單分析,并給出了的代碼實現。平均時間復雜度不好分析,它是冒泡排序是穩定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復雜度是的排序算法。歸并排序,會將數組從中間分成左右兩部分。 本文對一些排序算法進行了簡單分析,并給出了 javascript 的代碼實現。因為本文包含了大量的排序算法,所以分析不會非常詳細,適合有對排序算法有一定了解的同學。本文內容其實不...

    liaoyg8023 評論0 收藏0
  • JS數據結構與算法_排序和搜索算法

    摘要:上一篇數據結構與算法樹寫在前面這是學習數據結構與算法的最后一篇博客,也是在面試中常常會被問到的一部分內容排序和搜索。 上一篇:JS數據結構與算法_樹 寫在前面 這是《學習JavaScript數據結構與算法》的最后一篇博客,也是在面試中常常會被問到的一部分內容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無心去深入研究排序相...

    姘擱『 評論0 收藏0
  • JS中可能用得到的全部的排序算法

    本篇有7k+字, 系統梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復雜的排序實現,如果喜歡請點贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導讀 排序算法可以稱得上是我的盲點, 曾幾何時當我知道Chrome的Array.prototype.sort使用了快速排序時, 我的內心是奔潰的(啥是快排, 我只知道...

    verano 評論0 收藏0

發表評論

0條評論

tianlai

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<