码迷,mamicode.com
首页 > 编程语言 > 详细

(算法)Partition方法求数组第k大的数

时间:2015-08-11 21:25:10      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

如题,下面直接贴出代码:

#include <iostream>

using namespace std;

int Partition(int* A,int left,int right){
    int key=A[left];
    while(left<right){
        while(left<right && A[right]>=key)
            right--;
        if(left<right)  A[left]=A[right];

        while(left<right && A[left]<=key)
            left++;
        if(left<right)  A[right]=A[left];
    }
    A[left]=key;
    return left;
}

int findKthNum(int* A,int left,int right,int k){
    int index=Partition(A,left,right);
    if(index+1==k)
        return A[index];
    else if(index+1<k)
        findKthNum(A,index+1,right,k);
    else
        findKthNum(A,left,index-1,k);
}

int main()
{
    int A[]={2,3,5,1,6,7,4};
    int len=sizeof(A)/sizeof(A[0]);

    cout << findKthNum(A,0,len-1,7) << endl;
    return 0;
}

  

(算法)Partition方法求数组第k大的数

标签:

原文地址:http://www.cnblogs.com/AndyJee/p/4722220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!