排序之快排(JS)


快速排序(Quicksort)是對冒泡排序的一種改進。

  它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列

       詳細描述:首先在要排序的序列 a 中選取一個中軸值,而后將序列分成兩個部分,其中左邊的部分 b 中的元素均小於或者等於 中軸值,右邊的部分 c 的元素 均大於或者等於中軸值,而后通過遞歸調用快速排序的過程分別對兩個部分進行排序,最后將兩部分產生的結果合並即可得到最后的排序序列。

 

 

js實現

//交換數據
function swap(arr,i,j){
    arr[i]=arr[i]+arr[j];
    arr[j]=arr[i]-arr[j];
    arr[i]=arr[i]-arr[j];
    return arr;
}

//快排,一般index設置為0,從第一個數值開始
function fastSort( arr, left, right, index){
    let tmp = arr[index];
        //左邊和右邊是否相同,不同繼續尋找
    while( right!=left){
                //從最右邊找到一個比基准值小的數據,則進行交換
        while(arr[right] <= tmp ){
            right--;
            swap(arr,index,right);
            index = right;
        }
         //從最左邊找到一個比基准值大的數據,則進行交換
        while(arr[left] >= tmp ){
            left++;
            swap(arr,index,left);
            index = left;
        }
    
                //以基准值索引為界,分別對其做序列以及有序列進行繼續排序
        fastSort(arr, left, index-1);
        fastSort(arr, index+1, right);
    }
    return arr;
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM