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