js常見的幾種排序演算法

2021-09-09 05:50:17 字數 2516 閱讀 3173

最近自己總結了js常見的幾種排序演算法,並進行了簡單的測試和對比。包括:氣泡排序,插入排序,選擇排序,快速排序,歸併排序等。

氣泡排序比較簡單,就是從前往後依次比較相鄰的兩個值,如果前乙個大於後乙個值就交換位置,一趟之後最大的值就排在最後一位了,然後同理在排序剩下的n-1 ,n-2 …個數**如下:

function

bubblesort

(list)}}

return list;

}

選擇排序的基本思路,將陣列分為左側的有序序列如:[a0,…ai],和右側的無序待排序列[a[i+1],…an],每次將無序序列中選出乙個最小值放入到有序序列的最後乙個。**如下:

function

selectsort

(list)}}

return list;

}

插入排序的思想也是將陣列分為有序序列和無序序列兩個部分,每次從無序序列中拿出第乙個,然後在有序序列中比較插入到適當的位置,然後重複操作直到數列完全有序,**如下:

function

insertsort

(list)}}

return list;

}

通常情況下快速排序可以稱得上是效率最高的排序方法了。快排的基本思想是通過在數列中找到乙個中間值,使小於中間值的值排在左邊,大於中間值的排在右邊,左邊的任意乙個值都要小於等於右邊數列的值,然後再分別對左側和右側的數列進行分割以此類推,知道整個數列有序。**如下:

function

quicksort

(list)

if(lower < height)

while

(list[lower]

<= powkey && height > lower)

if(lower < height)

} list[lower]

= powkey;

if(start +

1< lower)

if(lower +

1< end)

}quick

(list,

0, list.length -1)

;return list;

}

上面**就是整個快排實現過程。首先呼叫內部quick方法,傳入陣列,開始和結束位置,然後在方法內部定義乙個高位指標heigh和乙個地位指標lower,

然後設定中間值,這裡我們去中,間的值(通常會取第乙個,但是如果陣列本身就有序,那麼每次分出來的兩個數列基本就是左邊為0,右邊是整個陣列,這種情況會使快排的效率極具下降,所以我去中間值,然後同第乙個交換位置,再把第乙個做為關鍵值進行比較)。首先從高位比較,如果高位的值大於中間值powkey,則位置不變,如果小於powkey說明應該位於中間值的左側,這時包這個高位的值放到低位lower,然後lower++ 判斷低位的值是否大於powkey,如果大於說明應該位於右側,然後把該值移動到剛才空餘出來的高位height(上面把高位的值移動到低位了),然後再從高位比較重複之前過程直到lower和height重合。重合的位置重新設定為powkey。一次分割完成,判斷左右兩側的陣列長度是否大於1,大於1繼續遞迴,否則不用分割。

歸併排序的思維也是對陣列進行一分為二分割,不同的是歸併排序不是按照關鍵值進行分割,而是從中間將陣列一分為二,然後不斷分割形成一顆二叉樹,例:[6,5,7,2,5, 9]如圖:

從二叉樹最底層向上有序合併,如,5和7合併為[5,7], 5和9合併[5,9]然後,在向上合併,6 和[5,7]合併為[5,6,7], 2和[5,9]合併為[2,5,9],一直合併到最頂端合併為乙個陣列。

**如下:

function

mergesort

(list)

else

} list = list.

concat

(left)

.concat

(right)

;return list;

}function

sort

(arr)

let mid = math.

floor

((arr.length +1)

/2);

return

merge

(sort

(arr.

slice(0

, mid)),

sort

(arr.

slice

(mid)))

;}return

sort

(list)

;}

首先呼叫內部sort,傳入陣列,如果長度為1則返回,否則將陣列一分為二,遞迴呼叫merge,傳入的兩個引數分別為分別遞迴呼叫sort進行拆分,知道長度為1即二叉樹最底層,然後進行merge,在merger中分別對兩個 陣列第乙個值進行比較,最小的放入新的陣列中,然後返回乙個新的有序的陣列,即返回二叉樹的上一級。在上一級中再次進行陣列合併,返回乙個新的有序陣列,知道合併為同乙個。

先寫到這裡,稍後更新。

js的幾種常見的演算法排序總結

思想 比較相鄰的兩個元素的大小,順序如果相反的話則進行交換,這樣的話每次迴圈都可以將最小的或者最大的元素放到後面,最終達到排序的效果 可公升序可降序 實現var array 3 4,1 5,2 45,1 23 function bubblesort arr return arr console.lo...

JS幾種常見演算法

1.1 氣泡排序原理 1.2 氣泡排序例項var examplearr 8,94,15,88,55,76,21,39 function sortarrbybubble arr return arr sortarrbybubble examplearr console.log examplearr 複...

幾種常見排序演算法

幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...