思路
- 首先在数组中选一个数作为基准,通常为数组第一个数
- 指针 i,j 分别指向数组第一个元素和最后一个元素。从 j 向左开始遍历,找到比基准小的数,将指针j对应的数赋值给指针i所在的位置,i++。交换,从i开始向右遍历,找到比基准大的数,将指针i对于的数赋值给指针j所在的位置,j–。不断重复以上步骤,知道 i、j 相遇。再将基准的值赋给指针 i、j 所在的位置。第一轮快排结束,基准左侧的数都小于等于基准,右侧的数都大于等于基准。
- 将数组以基准为界限,划分成两个子数组。重复以上快排步骤。直到子数组的长度为1,快排结束。
相关题解
- 5000 个数里选择 Top500
时间复杂度 O(n)
目的:找到下标为 499 的基准,这样,左边的数就都比基准大(快排思路中大小交换)
- 一个整型数组,有负数,0 ,正数,找重复次数最多的数。可能存在重复次数相同的数,返回其中一个即可
快排,用两个个变量记录 出现次数最多的数 和 其出现次数