JavaScript對快速排序演算法的初步實現

2021-07-27 02:45:44 字數 1041 閱讀 3099

通過該篇部落格的學習,理解了快速排序的幾個重要點:

1、如何選取pivot值

一般,都會選擇首位值或者末尾值,因為這樣取值相對很方便,傳入的陣列下標容易得到。其次,將所選首位值(假若是首位)先存放乙個變數中不動,然後利用填坑原理,讓首位值變成「坑」。

2、如何掃瞄陣列

在進行一次partion(一次快速排序)時,可以有兩種方式對陣列進行掃瞄比對。

<1>雙向掃瞄:是以所選的pivot為基準,兩個指標從陣列的首尾向中間掃瞄。尾指標遇到比pivot小與或等於的數值,與當前的「坑」進行交換,並產生新的「坑」。然後,首指標遇到比pivot大於或等於的數值,與當前的「坑」再進行交換。最後,將pivot的值賦值給最後一次主動要交換的陣列位置。

<2>單向掃瞄:是兩個指標一前一後同時向前開始掃瞄指標,由於該方法的效率要低於雙向掃瞄的方式,故而在此不做詳細的描述。有興趣的朋友,可以自行檢視大師具體部落格中的內容講解和**實現。

3、關於要排序的長度

由於快速排序可以應用到去解決top k問題,因此再選擇排序的時候,end(後面的具體**實現中可以看到)的取值要注意。當end小於陣列的length時,可以對前end+1個值排序;當end = length-1時,會對整個陣列進行排序,但此時會在陣列的末尾增加一位,其數值為undefined。當end >= length時,就會陷入死迴圈。

具體的**實現,如下:

function quicksort(arr, start, end) 

arr[i] = pivot;

if(start < end)

}

暫時先理解了快速排序演算法的乙個基本實現,至於bfprt演算法(對快速排序演算法的優化)之後在理解清楚之後再做具體的解釋。當然,快速排序演算法不止一種優化方法,還有其他的優化方法和思想值得去學習和借鑑。再嘮叨幾句(藉此送給不斷在變強的你我),在學習的路上,請保持專注,並且對知識保持一種飢渴感,促使自己不斷去提公升。當某一天突然回眸,你會很慶幸的發現,這個過程是多麼的珍貴和難忘。

javascript 快速排序

function quicksort arr 找到中間的那個數的索引值 如果是浮點數,就向下取整 var centerindex math.floor arr.length 2 根據這個中間的數的索引值,找到這個數的值 var centernum arr.splice centerindex,1 存...

javascript快速排序

快速排序 函式關鍵字 function 函式名 引數1,引數2 var array1 1,2,88,45,75,7,46,45,100,88,66,99,407,203 var result quicksort array1 console.log result function quicksort...

快速排序之JavaScript實現

function quicksort arr 取陣列的第0個陣列作為flag var flag arr.splice 0,1 0 left為用於裝載小於flag的數字的陣列 var left right為用於裝載小於flag的數字的陣列 var right 當前陣列長度 var len arr.le...