快速选择算法

来源:互联网 发布:中文移动域名 编辑:程序博客网 时间:2024/06/10 02:35

快速选择算法是基于快速排序算法的,目的是寻找一个无序表内的第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];}
0 0
原创粉丝点击