美文网首页
找到第k小的数(快速排序思想实现)

找到第k小的数(快速排序思想实现)

作者: Wide_Star | 来源:发表于2018-05-24 16:02 被阅读0次

    开始


    
    public class FindKth {
        public int findKth(int[] arr, int left, int right, int k) {
            int i;
            if (left > right) {
                return -1;
            } else {
                i=partion(arr, left, right);
                if (i-left+1 == k) {
                    return arr[i];
                } else if (i-left+1 > k) {
                    return findKth(arr, left, i - 1, k);
                } else {
                    return findKth(arr, i + 1, right, k-i-1);
                }
            }
        }
        public int partion(int[] arr, int left, int right) {
            int t;
            int i = left, j = right;
            int tmp = arr[left];
            while (i != j) {
                while (arr[j] >= tmp && i < j) {
                    j--;
                }
                while (arr[i] <= tmp && i < j) {
                    i++;
                }
                if (i < j) {
                    t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;
                }
            }
            arr[left]=arr[i];
            arr[i]=tmp;
            return i;
        }
        public static void main(String[] args) {
            int[] arr = { 2, 1, 55, 62, 13, 41, 22, 8, 77, 82, 16, 33 };
            System.out.println(new FindKth().findKth(arr, 0, arr.length - 1, 3));
        }
    }
    

    结束

    相关文章

      网友评论

          本文标题:找到第k小的数(快速排序思想实现)

          本文链接:https://www.haomeiwen.com/subject/kcusjftx.html