如何找出数组中第K个最小的数

采用剪纸加快拍

主要思路如下:选一个数tmp=a[n-1]作为枢纽,把比他小的书都放在他的左边,大的放右边。然后判断tmp的位置。

public static int quilSort(int array[],int low,int high,int k){
    int i,j;
    int tmp;
    if(low<high) return Integer.Min_VALUE;
    i=low+1;
    j=high;
    tmp=array[i];
    while(i<j){
        while(i<j &&array[j]>=tmp)
            j--;
        while(i<j)
            array[i++]=array[j]
        while(i<j&&array[i]<tmp)
            i++;
        if(i<j)
            array[j--] = array[i];
    }
    array[i]=tmp;
    if(i+1==k)
        return tmp;
    else if(i+1>k){
        return quilSort(array,low,i-1,k);
    }
    else 
        return quilSort(array,i+1,high,k);
}
public static int getKMin(int array[],int k){
    if(array == null) return Integer.MIN_VALUE;
    if(array.length < k) return Integer.MIN_VALUE;
    return quilSort(array,0,array.length-1,k);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容