快速選擇算法

快速選擇算法是基於快速排序算法的,目的是尋找一個無序表內的第k大(小)的元素。

  • 快速排序:
    快速排序的原理是把每次一個無序表以一個目標節點爲中心,向左放比它小的,向右放比它大的。重複這一過程,就可以得到一個有序表。

  • 快速選擇:
    當快速排序要進行遞歸時,此時目標節點的下標m就是它在這個表內的位置。所以,我們可以通過比較k與m的關係,判斷下一步應往那一個方向拓展,直到k=m,程序結束,返回該元素。

下面給出代碼:

int QuickSelect(int *a, int left, int right, int k)
{
    int mark = a[ left ];
    int i = left;
    int j = right;
    while( i < j )
     {
        while ( a[j] >= mark && i < j )
             j--;
         a[i] = a[j];

        while ( a[i] <= mark && i < j )
             i++;
         a[j] = a[i];
     }
     a[i] = mark;
    if( k < i + 1 )
        return QuickSelect( a, left, i - 1 , k);
    else if( k > i + 1 )
        return QuickSelect( a, i + 1, right, k);
    else
        return a[i];
}
發佈了41 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章