快速排序--递归法

排序算法比较于其他的排序算法 速度上更快 排序效率更高。。。也是我觉得逻辑比较复杂的一个算法。。经过几个片段晚上的学习,终于明白了其中的原理并代码实现了。在这里分享给大家~~~

  原理:一待排序的数组,我们先找到基准点(关注点) 一般设置为数组第一个元素 其实任何一个都可以。然后接下来就是排序了

    定义两个循环 一个 i 循环从左往右, 一个 j 循环从右往左,i 循环如果比基准点数小,就不断往右走。一旦碰到比基准点大的数就将此值抛给 j 循环此时停留的位置,j 循环如果比基准点数大,就不断往左走,一旦碰到比基准点小的数就将此值抛给 i 循环所停留的位置。那么,就存在一个美好的时刻 i 和 j 碰到一起了 那么此时的就需要将基准点值赋值给该位置的值,这样的话 在基准点左边的所有element就全部比基准点数小(但不一定是有序的),同理,在基准点右边的所有element就全部比基准点大,那么,就完成了一次循环。。。

剩下的就是重复上述过程,那么就可以用递归。针对左边的全部element 开始位置就是start(此时是0) 那么结束位置为基准点位置-1,右边部分开始位置基准点位置+1,结束位置end(此时是arr.length-1) 然后第二次结束  最后在细分(类似二分查找)  往返。。。最终待排序序列全部排序完毕!

 1 package cn.test;
 2 
 3 class Main{
 4     public static void main(String[] args) {
 5         int[] arr = {2,45,6,5,2,67,4};
 6         
 7         QuickSort(arr,0,arr.length-1);
 8         
 9         for(int i=0;i<arr.length;i++){
10             if(arr[i] ==  arr[arr.length-1]){
11                 System.out.println(arr[i]);
12             }else{
13                 System.out.print(arr[i]+" ");
14             }
15         }
16     }
17     public static void QuickSort(int[] arr,int start,int end){
18         if(start<end){
19             int index = GetIndex(arr,start,end);
20             QuickSort(arr, start, index-1);
21             QuickSort(arr, index+1, end);
22         }
23         
24     }
25     public static int GetIndex(int[] arr, int start, int end) {
26         int i= start;
27         int j= end;
28         int index = arr[start];
29         while(i<j){
30             while(i<j){
31                 if(arr[j]<index){//j往左走
32                     arr[i] = arr[j];
33                     break;
34                 }
35                 j--;
36             }
37             while(i<j){
38                 if(arr[i]>index){//i往右走
39                     arr[j] = arr[i];
40                     break;
41                 }
42                 i++;
43             }
44         }
45         arr[i] = index;
46         return i;
47     }
48 }

 

posted on 2018-03-25 23:55  OrangeCsong  阅读(587)  评论(0编辑  收藏  举报

导航