初级工程师之排序算法一一一一一快排算法java实现

 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 }

 

posted on 2020-09-23 23:31  CCChester  阅读(155)  评论(0编辑  收藏  举报

导航