思想:
选择一个基准值,通过一趟排序,将待排序队列分为三部分,小于等于基准值的一部分,基准值,大于等于基准值的一部分。然后用同样的方法递归的排序小于等于基准值的一部分和大于等于基准值的一部分。
图示:
具体实现:
- 选择基准值
1,选择最边上(左右都可以)
2,随机法
3,三数取中法
对于2,3,选好基准值后,再把基准值交换到最边上 - 遍历整个区间,分割成三部分
一个下标从左边开始(begin),一个下标从右边开始(end)
过程中保证begin的左边值都比基准值<=
end的右边都比基准值>=
如果遇到不符合的情况,进行交换后继续
直到begin遇到end
最后把基准值交换到中间 - 分治算法处理左右两个小区间,直到
区间的size == 1(已经有序)或 size == 0
代码实现:
package www.sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[