js的插入排序演算法詳細介紹

admin發表於2017-03-20

排序方法有很多中,本章節通過程式碼例項和註釋詳細介紹一下插入排序演算法。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function InsertSort(arr) {
  var temp, j;
  for (var index = 1; index < arr.length; index++) {
    if ((arr[index]) < (arr[index - 1])) {
      temp = arr[index];
      j = index - 1;
      do {
        arr[j + 1] = arr[j];
        j--;
      }
      while (j > -1 && (temp) < (arr[j]));
      arr[j + 1] = temp;
    }
  }
  return arr;
}
var theArray = [10, 15, 2, 8, 9, 8, 13, 26];
console.log(InsertSort(theArray));

以上程式碼實現了排序效果,下面介紹一下它的實現過程。

一.實現原理:

所謂插入排序其實就是從陣列開始進行比較大小,將小的插入到大的前面,其實很難單純描述清楚,只要明白程式碼的運作過程,那麼原理自然清楚了,具體可以參閱相關閱讀。

二.程式碼註釋:

1.function InsertSort(arr) {},引數為進行排序的陣列。

2.var temp, j,宣告兩個變數,temp用來儲存陣列元素值,用來做一個過渡傳遞,j用來儲存陣列的索引。

3.for(var index=1; index<arr.length; index++) {},用來規定for迴圈執行的次數。

4.if((arr[index]) < (arr[index-1])),判斷陣列兩個相鄰元素的大小,例如i是1,就是判斷第二個元素是否小於第一個元素,依次類推。

5.temp = arr[index],將索引值為i的陣列元素暫時存入變數temp,也就是較小的那個元素。

6.j = index-1,將i的值減一,也就是索引值為i的元素的上一個元素的索引。

7.do {arr[j+1] = arr[j];j--;},將大的值設定為索引值大的位置的元素值(這正是排序的目的),然後將j再減一,這個時候的索引就是當前比較大小的陣列元素的前面元素的索引值。

8.while (j>-1 && (temp) < (arr[j])),j>-1,也就是規定最小是0,也就是判斷當前比較的陣列元素中較小的那一個是否小於它們前面的元素,因為是while語句,所以會依次比較前面的元素,直到第一個陣列元素。

9.arr[j+1] = temp,將較小的值插入到指定的位置,這個位置是在比較過程中不斷變動的。

三.最後總結:

可能看了程式碼註釋感覺還是比較混亂,其實比較過程是這樣的,首先從陣列第0個和第1個元素開始比較,判斷第1個元素是否小於第0個元素,如果小於,那麼將第一個元素存入變數temp,然後將第0個元素的值設定為第1個元素的值,這個時候temp無法再向前比較了,因為在j--之後,已經小於0了,所以就將temp的值設定為j+1位置上的值也就是第一個元素的值,然後再開始比較第1個和第2個元素值的大小,如果第2個的值小於第1個,那麼將第3個的值賦值給temp,然後將第1個的值賦值給第2個,然後temp和第0個進行比較,如果小於第0個的值,那麼再將第0個值設定為第2個的值,這時又因為j小於0了,所以將temp的值設定為第1個的值,依次類推。總的來說就是將小的值插入大的值的前面。

相關文章