查找第 k 大的元素

来源:互联网 发布:monaco 字体 windows 编辑:程序博客网 时间:2024/05/21 19:44

1.原理:


       运用快速排序的方法,把数组s[i,j]分成两个子列,判断基准数在数组的位置 p 和(k-1)的大小;

        若 p == k-1,则 s[p] 就是第 k 大的数;

        若 p < k-1 ,则在 s[p+1,j] 中查找;

        若 p > k-1, 则在 s[i,p-1] 中查找;


2.代码:

 void find_Kth(int a[],int l,int r,int n) { if(l <= r) { int i=l,j=r,x=a[i]; while(i < j) { while(i<j && a[j]>=x)         j--;     if(i<j){     a[i] = a[j];     i++;    }    while(i<j && a[i]<=x)        i++;    if(i<j){    a[j] = a[i];    j--;    } } a[i] = x; if(i < n-1)     find_Kth(a,i+1,r,n); else if(i > n-1)     find_Kth(a,l,i-1,n); else if( i==(n-1))      cout << "第 " << n << " 大的数为:" << a[i] << endl;  } }


0 0
原创粉丝点击