寻找数组第k大的值

[刷题1]寻找数组第k大的值

思想:利用快排的partition函数,返回位置坐标mid,如果mid==k-1,我们已经找到第k大的数;如果mid < k-1,对mid右边进行递归;如果mid>k-1,对mid坐标进行递归。

partition代码:

public int partition(int a[],int left,int right)
    {
        int temp = a[left];
        while(left < right)
        {
            while(left<right && a[right] >= temp)
                right--;
            a[left] = a[right];
            while(left<right && a[left] <= temp)
                left++;
            a[right] = a[left];
        }
        a[left] = temp;
        return left;
    }

findMink代码:

public int findMink(int a[],int left,int right,int k)
    {
        if(k > a.length)//k是否已经超过数组的大小
            return -1;
        if(left >= right)
            return a[left];
        int mid = partition(a,left,right);
        if(mid == k-1)
            return a[mid];
        else if(mid > k-1)
            return findMink(a,left,mid-1,k);
        else
            return findMink(a,mid+1,right,k);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值