初级工程师之排序算法一一一一一快排算法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 }