快速選擇算法是基於快速排序算法的,目的是尋找一個無序表內的第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];
}