天天看點

找出數組中第K個最小的數(快速排序)

問題描述:給定一個無序的數組,從一個數組中找出第K個最小的數,例如,對于給定數組序列{1,5,2,6,8,0,6},其中第4小的數為5。

算法思路:采用快速排序,分而治之的思想,根據主元,每次Partiton以主元為軸,比它小的數在左邊,比它大的數在右邊,判斷tmp的位置,如果它的位置為k-1,那麼它就是第k小的數,如果它的位置小于k-1,那麼第k小一定在數組的右半部分,采用遞歸方法在數組右半部分繼續查找;否則第k小在數組左半部分,采用遞歸方法在左半部分數組中繼續查找。

public class Main {

    /**
     * @param args
     */
    public static int quickSort(int array[],int low,int high,int k){
        int i,j;
        int tmp;
        if(low>high)
            return Integer.MIN_VALUE;
        i=low;
        j=high;
        tmp=array[i];
        while(i<j){
            while(i<j&&array[j]>=tmp)
                j--;
            if(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+==k)
            return tmp;
        else if(i+>k)
            return quickSort(array,low,i-,k);
        else
            return quickSort(array,i+,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 quickSort(array,,array.length-,k);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       int a[]={,,,,,,};
       int kMin=getKMin(a,);
       System.out.println(kMin);
    }

}
           

繼續閱讀