一.经典快排思想
前提条件:给定一个无序数组arr
- 取这个数组最后一个数 num 作为标准,将前面部分的数分为两部分,使得<=num的部分在左边,>num的数在右边;
- 然后将最后一个数和>num部分的第一个数进行交换,就使得原本在数组最后位置的num找到了正确的位置,它的左边都是比它小的以及和它一样的数,右边都是比它大的数
- 回到1,进行递归或迭代,使得所有的数都找到正确的位
二.通过荷兰国旗问题改进快排
什么是荷兰国旗问题?
已知一个整形数组arr,和一个整数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。
解决思路:
遍历数组,
1. 若比num小,当前位置和小于的最后一个位置+1的值交换,并当前位置++;
2. 若比num大,当前位置和大于的第一个位置-1的值交换;
3. 若等于num的值,当前位置++;
附上代码:
public static void