摘要:
暴力解法 直接遍历记录三种数字的个数 优化1——双指针法(三路快速排序法) class Solution { public void sortColors(int[] nums) { /** * 双指针遍历,i为当前遍历元素,如果为0就放在左边,为2放在右边,为1就继续遍历 */ int left 阅读全文
posted @ 2021-10-23 16:57
振袖秋枫问红叶
阅读(67)
评论(0)
推荐(0)
摘要:
核心思想:将数组拆分成三个区间,对于等于标定点的元素,也单独划分区间来保存,在下次循环的时候不考虑这部分区间,如果是元素相同的数组,就不会重复遍历这些元素了,这称为三路快速排序法 设置三个指针lt、gt和i,lt指向左区间最后一个元素,gt指向右区间第一个元素,当arr[i] < arr[left] 阅读全文
posted @ 2021-10-23 16:32
振袖秋枫问红叶
阅读(376)
评论(0)
推荐(0)
摘要:
为了解决数组中重复元素过多导致的性能退化,重新思考partition()方法的逻辑,在原有的基础上,从两端分别进行比较大小,就算是完全有序的数组,也可以让p处于中间位置而不是left 核心思想:将数组划分为 >= arr[left]和 ⇐ arr[left]两个区间,设置两个遍历指针i和j,i指向左 阅读全文
posted @ 2021-10-23 11:40
振袖秋枫问红叶
阅读(232)
评论(0)
推荐(0)
摘要:
随机化选择标定点 为了解决对有序数组排序,快速排序法复杂度变成O(n^2)的问题,在partition()方法中随机化选择一个元素作为标定点 import java.util.Arrays; import java.util.Random; public class Algorithm { publ 阅读全文
posted @ 2021-10-23 11:29
振袖秋枫问红叶
阅读(67)
评论(0)
推荐(0)
摘要:
核心思想:快速排序法也是一种分治算法 先定义一个partition()方法找到第一个元素的正确位置,返回其真正的索引p,称为标定点 即p前面的元素都比它小,p后面的元素都比它大,由此将数组分为两个子区间 然后再递归调用快速排序对两个分区间进行同样的操作,最终完成排序 实现快速排序法 import j 阅读全文
posted @ 2021-10-23 11:25
振袖秋枫问红叶
阅读(90)
评论(0)
推荐(0)

浙公网安备 33010602011771号