1. 程式人生 > >快速排序的兩種實現方法(js)

快速排序的兩種實現方法(js)

while 交換 splice rt+ dex 進行 return ont mat

快速排序的基本思想:通過一趟排序,將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分記錄的關鍵字小,則可分別對著兩部分記錄繼續進行排序,以達到整個序列有序的目的。--------------冒泡的升級版。

分為兩種方法:(1)使用兩個數組進行存放。(2)使用交換(正宗版本

(1)

    function quickSort(arr){
        if(arr.length<1){
            return arr;
        }
        var pivotIndex=Math.floor(arr.length/2);//找到那個基準數
        var
pivot=arr.splice(pivotIndex,1)[0]; //取出基準數,splice返回值為數組。 var left=[]; var right=[]; for(var i=0;i<arr.length;i++){ if(arr[i]<pivot){ left.push(arr[i]); }else{ right.push(arr[i]); } } return
quickSort(left).concat([pivot],quickSort(right)); } arr=[2,1,5,8,3,7,4,6,9]; console.log(quickSort(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]

(2)

        var arr=[12,20,5,16,15,1,30,45,23,9];
    var start = 0;
    var end = arr.length;
    console.log(‘arr:‘ +arr);
    function quickSort(arr,low,high){
        
var key=arr[low]; var start=low; var end=high; while(end>start){ while(end>start&&arr[end]>=key) end--; if(arr[end]<=key){ var temp = arr[end]; arr[end]=arr[start]; arr[start] = temp; } while(end>start&&arr[start]<=key) start++; if(arr[start]>=key){ var temp = arr[start]; arr[start]=arr[end]; arr[end]=temp; } } if(start>low) quickSort(arr,low,start-1); if(end<high) quickSort(arr,end+1,high); } quickSort(arr,start,end); console.log(‘After arr:‘ +arr); //[1,5,9,12,,15,16,20,23,30,45]

第一種快速排序方法為改良後的版本,第二個快速排序方法為正宗的通過冒泡排序衍生的快速排序方法。

快速排序的兩種實現方法(js)