1 public static int[] quickSort(int[] sortList,int start,int end){
2 //判断条件防止内存栈溢出
3 if(start > end){
4 return sortList;
5 }else {
6 //设立初始值,将这个数单独拿出来
7 int flag = sortList[start];
8 //起始位置
9 int localStart = start;
10 //终止位置
11 int localEnd = end;
12 //目标把小于初始值的数放在初始值的左边,大于初始值的数放在他的右边
13 //当终止位置大于起始位置时,证明需要移动
14 //当localend <=localStart 时说明移动完毕
15 while(localEnd>localStart){
16 //从终止位置向左走,找到一个比初始值小的数就将小的值赋值给初始值的位置,
17 // 因为我们已经将初始值位置(第一次之后时localstart的位置)的数,拿了出去(第一次之后是赋值给localend的位置),
18 //所以直接覆盖即可
19 //这里的判断条件不仅要数比初始值小,还要localend >local
20 while (sortList[localEnd]>=flag&&localEnd>localStart){
21 localEnd--;
22 }
23 sortList[localStart] = sortList[localEnd];
24 //从起点位置向右走,找到比初始值大的数就将这个数赋值给localend的位置,在上面的代码中localend位置的数已经赋值给localstart
25 //所以直接覆盖即可
26 //注意判断条件
27 while (sortList[localStart]<flag&localStart<localEnd){
28 localStart++;
29 }
30 sortList[localEnd] = sortList[localStart];
31 }
32 //关键步骤,移动完毕之后千万别忘了把初始值放到中间位置
33 sortList[localStart] = flag;
34 //分治思想,左边比初始值小的部分同样用这种方法
35 sortList =quickSort(sortList,start,localStart-1);
36 //右边比初始值大的不也用这种思维
37 sortList=quickSort(sortList,localStart+1,end);
38 }
39 //为什么要有返回值
40 //java中是值传递的
41 return sortList;
42 }
43 }