剑指offer

point offer 40

package PointOffer;

import java.util.Comparator;
import java.util.PriorityQueue;

public class Solution40 {

    public static int[] getLeastNumbers(int[] arr, int k) {
        PriorityQueue<Integer> heap = new PriorityQueue<>(k, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        for (int i = 0; i < arr.length; i++) {
            heap.offer(arr[i]);
            if (heap.size() > k) {
                heap.poll();
            }
        }
        int[] res = new int[k];
        for (int i = 0; i < heap.size(); i++) {
            res[i] = heap.poll();
        }
        return res;
    }

    public static void swap(int[] arr, int x, int y) {
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }

    //快排搜索
    public static int quickSearch(int[] arr, int l, int r, int k) {
        int t = partition(arr, l, r);
        if (t == k) {
            return arr[t];
        } else if (t > k) {
            System.out.println("t=" + t + ",k=" + k);
            return quickSearch(arr, l, t - 1, k);
        } else {
            System.out.println("t=" + t + ",k=" + k);
            return quickSearch(arr, t + 1, r, k);
        }
    }

    //快排
    public static void quickSort(int[] arr, int l, int r) {
        if (l < r) {
            int t = partition(arr, l, r);
            quickSort(arr, l, t - 1);
            quickSort(arr, t + 1, r);
        }
    }

    public static int partition(int[] arr, int L, int R) {
        int l = L + 1, r = R, t = arr[L];
        System.out.println("l=" + l + ",r=" + r);
//        System.out.println("arr[l]="+arr[l]);
        if (l < r) {
            while (true) {
                while (l < r && arr[r] > t) r--;
                while (l < r && arr[l] < t) l++;
                if (l >= r) break;
                swap(arr, l, r);
            }
            printArray(arr);
            swap(arr, L, r);
        }
        return r;
    }

    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ",");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = new int[]{213, 32, 1243, 33, 88, 2};
        quickSort(arr, 0, arr.length - 1);
//        System.out.println(quickSearch(arr,0,arr.length-1,5));
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ",");
        }
        System.out.println();
    }
}
原文地址:https://www.cnblogs.com/zhouyu0-0/p/14857513.html