快速排序与寻找第k小的数算法

慕课网 首发了,放在垂直领域吧。备份。

出现了一点小问题,就是index,要注意。想法网上一大堆,不多说了。

ubuntu18下输入法有问题,sogou没有安装上,打字好累啊。

sou.png
package day20180425;

public class SortDem {

    public static void main(String[] args) {
        
         int[] arr={32,68,-98,51,88,1};
         display(arr);
        System.out.println();
        quicksort(arr,0,arr.length-1);
        display(arr);

    }
    
    static int keyfid(int[] arr,int left ,int right)
    {
        int i=left,j=right,temp;
         int p=arr[left];
     /*
      * 是i=arr[i])
               i++;
           if(iright)
        return;
        else
        {
           key=keyfid(arr,left,right);
           quicksort(arr,left,key-1);
           quicksort(arr,key+1,right);
            
        }
        
    }
    
    
    static void display(int[] arr)
    {
        for(int value:arr)
        System.out.print(" "+value);
    }

}
 32 68 -98 51 88 1
 -98 1 32 51 68 88

寻找一个数组中第k小的数,比如 [32 68 -98 51 88 1]中,选择第3小的数,就是32,一种想法是把数字排序,在去下标,但是可以利用快排。其实只要取得轴值就可以了。

static int sort(int[] arr,int k,int left,int right)
    {
        int index;
        index=keyfid(arr,left,right);
        if(k-1==index)
            return arr[index];
        else if(index>k)
        {
            return sort(arr,k,left,index-1);
        }
        else
            return sort(arr,k,index+1,right);
            
        
    }
第3小的数为:32

你可能感兴趣的:(快速排序与寻找第k小的数算法)