快速排序(一)
经典快速排序
基础问题(partiton)
给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。
要求额外空间复杂度O(1),时间复杂度O(N)
本题的解题思路如下:
- 首先选定一个哨兵(指针)less指向数组的最左侧,作为小于等于区域的边界,即小于等于区域的范围是:[0,less]。
- 然后选定一个指针index指向当前遍历的索引,开始遍历整个数组。
- 如果index指向的arr[index]<=num,那么将当前指向的数与小于等于区域的下一个数交换,并且index+1。
- 如果index指向的arr[index]>num,那么index+1。
程序代码如下:
public class Solution{
public static void partiton(int[] arr,int num) {
int less = -1;
for (int i = 0;i<arr.length;i++)</