排序算法——快速排序 Quicksort

快速排序(Quicksort)是一種很高效的排序算法,不管是在教學還是在實際應用上,它的使用都非常廣泛。Quicksort算法的時間複雜度平均爲O(nLogn),它很適合用於大量數據的排序,而且其算法原理也很簡單。

快速排序是對冒泡排序的一種改進,它的基本思想是,通過一趟排序將待排序序列分割成獨立的兩個子序列,其中一個序列的值比另一序列的小,然後對這兩個序列繼續進行排序,直到整個序列有序。假設輸入子數組爲a[p:r],則其的快排過程如下:

(1)分解(divide):以a[p]爲基準元素將a[p:r]劃分成3段a[a:q-1]、a[q]和a[q+1:r],使得a[p, q-1]中的任何元素小於等於a[q],a[q+1:r]中的任何元素大於等於a[q],下標q在劃分過程中確定。

(2)遞歸求解(conquer):通過遞歸調用快排算法,分別對a[p:q-1]和a[q+1:r]進行排序。

(3)合併(merge):由於對a[p:q+1]和a[q+1:r]的排序是就地進行的,所以在a[p:q+1]和a[q+1:r]都已排好序後不需要執行任何計算,a[p:r]就已排好序。

 

算法基本實現如下

//快速排序算法  
void QuickSort(int *array, int p, int r)  
{  
    int q;  
    if(p < r)  
    {  
        q = Partition(array, p, r);//計算基準元位置  
        QuickSort(array, p, q-1);//對基準元左側進行排序  
        QuickSort(array, q+1, r);//對基準元右側進行排序  
    }  
}

以輸入序列10 80 30 90 40 50 70爲例,應用快速排序進行排序的過程如下圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章