由於自己不是計算機專業,資料結構沒有太多研究,曾經面試時有被問過關於快速排序以及氣泡排序的寫法,氣泡排序比較簡單,當時能回答出來,但是快速排序當時就比較懵逼,不知道是個什麼方式實現的,面試回來後也沒太在意,最近在看c語言的資料結構,拓展下這方面的知識,其中就看到了關於快排演算法的描述
描述如下:在待排序的n個記錄中任取乙個記錄(通常取第乙個記錄),資料序列被此記錄劃分成兩部分。所有關鍵字比該記錄關鍵字小的記錄放置在前一部分,所有比它大的記錄放置在後一部分,並把改記錄排在這兩部分的中間(稱為該記錄歸位),這個過程稱作一次快速排序。之後對所有的兩部分分別重複上述過程,直至每部分內只有乙個記錄或空為止。
光看概念有點暈,書上用的是c的源**,改寫下,變成js**:
function quicksort(arr, start, end)
var com = arr[j]
arr[j] = arr[i]
arr[i] = com
while(arr[i] < temp && i < j)
var com1 = arr[j]
arr[j] = arr[i]
arr[i] = com1
}arr[i] = temp
quicksort(arr, start, i - 1)
quicksort(arr, i + 1, end)
}}
解釋下:
假設乙個無序陣列:[6,8,7,9,0,1,3,2,4,5]
取第乙個元素為參考元素,先從尾端開始即end向左遍歷,元素下標為j, 發現比參考元素小的值,則與從左向右遍歷的元素arr[i]進行交換,然後就從i開始向右遍歷,找到乙個比參考元素大的值,而後與arr[j]進行交換,最終i = j 時完成一次快速排序,然後對左邊部分進行快排,對右邊進行快排。
根據書上就是這樣的了,自己也嘗試了下,答案是沒有問題的
然後看網上某位大佬的做法,更加簡單易懂,將快排簡單化,就是比參考元素小的放置左邊部分,比參考元素大的放置右邊部分,而後分別對兩部分進行快排。
**如下:
function quicksort(arr)
var left = , right=
var pivotindex = math.floor(arr.length / 2)
var pivot = arr.splice(pivotindex, 1)[0]
for (var i = 0; i < arr.length; i++) else
}return quicksort(left).concat([pivot], quicksort(right))
}
大佬的**還是比較厲害的,簡單易懂,佩服
以上就是相關的快速排序的實現方法
js實現快速排序的方法
第一種是通過兩個for迴圈,每一次對比相鄰兩個資料的大小,小的排在前面,如果前面的資料比後面的大就交換這兩個數的位置,這個方法就是比較次數太多了,效率比價低。我只是傳入了乙個10位數的陣列,如果是上萬或者更大的資料,不知道您的電腦會不會藍屏了,嘿嘿,你可以試試哦!varsort function a...
快速排序的js實現
該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。var quicksort function arr var pivotindex math.floor arr....
js實現快速排序
快排思想 1 在資料集之中,選擇乙個元素作為 基準 pivot 2 所有小於 基準 的元素,都移到 基準 的左邊 所有大於 基準 的元素,都移到 基準 的右邊。var quicksort function arr var pivotindex math.floor arr.length 2 var ...