快速排序之topk
使用快排解決top k的問題 解法是最優的
時間復雜度 O(N),空間復雜度 O(1)
解析
主要包含三個函數,主函數找到最大k, 循環l<r 然后判斷partition 返回來的是不是k,進行判斷
快排函數選取第一個作為pivot,進行對比 交換 返回該游標 的位置
快排
public class QuickSort<T extends Comparable<T>> extends Sort<T> {@Overridepublic void sort(T[] nums) {shuffle(nums);//先洗牌sort(nums, 0, nums.length - 1);}private void sort(T[] nums, int l, int h) {if (h <= l)return;int j = partition(nums, l, h);sort(nums, l, j - 1);sort(nums, j + 1, h);}private void shuffle(T[] nums) {List<Comparable> list = Arrays.asList(nums);Collections.shuffle(list);list.toArray(nums);} } private int partition(T[] nums, int l, int h) {int i = l, j = h + 1;T v = nums[l];while (true) {while (less(nums[++i], v) && i != h) ;while (less(v, nums[--j]) && j != l) ;if (i >= j)break;swap(nums, i, j);}swap(nums, l, j);return j; }總結
- 上一篇: 信息保护:从经典纠错到量子面膜
- 下一篇: 输入两个整数序列。其中一个序列表示栈的p