上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 36 下一页
摘要: 快速排序法 import java.util.Arrays; public class Algorithm { public static void main(String[] args) { int[] arr = {1,3,5,7,2,4,6,8}; System.out.println(Arr 阅读全文
posted @ 2021-10-24 15:05 振袖秋枫问红叶 阅读(25) 评论(0) 推荐(0)
摘要: import java.util.Arrays; public class Algorithm { public static void main(String[] args) { int[] arr = {1,3,5,7,2,4,6,8}; System.out.println(Arrays.to 阅读全文
posted @ 2021-10-24 14:58 振袖秋枫问红叶 阅读(32) 评论(0) 推荐(0)
摘要: 双指针法(双路快速排序法) class Solution { public int findKthLargest(int[] nums, int k) { /** * 第k大的元素等同于第length - k小的元素 */ int target = nums.length - k; return s 阅读全文
posted @ 2021-10-24 14:43 振袖秋枫问红叶 阅读(51) 评论(0) 推荐(0)
摘要: 暴力解法 直接遍历记录三种数字的个数 优化1——双指针法(三路快速排序法) class Solution { public void sortColors(int[] nums) { /** * 双指针遍历,i为当前遍历元素,如果为0就放在左边,为2放在右边,为1就继续遍历 */ int left 阅读全文
posted @ 2021-10-23 16:57 振袖秋枫问红叶 阅读(62) 评论(0) 推荐(0)
摘要: 核心思想:将数组拆分成三个区间,对于等于标定点的元素,也单独划分区间来保存,在下次循环的时候不考虑这部分区间,如果是元素相同的数组,就不会重复遍历这些元素了,这称为三路快速排序法 设置三个指针lt、gt和i,lt指向左区间最后一个元素,gt指向右区间第一个元素,当arr[i] < arr[left] 阅读全文
posted @ 2021-10-23 16:32 振袖秋枫问红叶 阅读(355) 评论(0) 推荐(0)
摘要: 为了解决数组中重复元素过多导致的性能退化,重新思考partition()方法的逻辑,在原有的基础上,从两端分别进行比较大小,就算是完全有序的数组,也可以让p处于中间位置而不是left 核心思想:将数组划分为 >= arr[left]和 ⇐ arr[left]两个区间,设置两个遍历指针i和j,i指向左 阅读全文
posted @ 2021-10-23 11:40 振袖秋枫问红叶 阅读(225) 评论(0) 推荐(0)
摘要: 随机化选择标定点 为了解决对有序数组排序,快速排序法复杂度变成O(n^2)的问题,在partition()方法中随机化选择一个元素作为标定点 import java.util.Arrays; import java.util.Random; public class Algorithm { publ 阅读全文
posted @ 2021-10-23 11:29 振袖秋枫问红叶 阅读(65) 评论(0) 推荐(0)
摘要: 核心思想:快速排序法也是一种分治算法 先定义一个partition()方法找到第一个元素的正确位置,返回其真正的索引p,称为标定点 即p前面的元素都比它小,p后面的元素都比它大,由此将数组分为两个子区间 然后再递归调用快速排序对两个分区间进行同样的操作,最终完成排序 实现快速排序法 import j 阅读全文
posted @ 2021-10-23 11:25 振袖秋枫问红叶 阅读(82) 评论(0) 推荐(0)
摘要: 剑指 Offer 51. 数组中的逆序对 递归解法(超内存) public class Algorithm { public static void main(String[] args) { int[] nums = {7,5,6,4}; System.out.println(new Soluti 阅读全文
posted @ 2021-10-21 10:26 振袖秋枫问红叶 阅读(30) 评论(0) 推荐(0)
摘要: 之前的归并排序称为自顶向下,将一个大的数组一步步的拆分为小的区间,分别进行排序,最后再合并 也可以将数组的元素拆分为n个区间,每次只对相邻的两个子区间排序,子区间的元素个数依次递增为1、2、4、8...直到最后合成一个完整数组 这种从小区间组合成大数组的方式,称为自底向上排序(Bottom to U 阅读全文
posted @ 2021-10-20 23:30 振袖秋枫问红叶 阅读(303) 评论(0) 推荐(0)
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 36 下一页