快速排序--递归法
排序算法比较于其他的排序算法 速度上更快 排序效率更高。。。也是我觉得逻辑比较复杂的一个算法。。经过几个片段晚上的学习,终于明白了其中的原理并代码实现了。在这里分享给大家~~~
原理:一待排序的数组,我们先找到基准点(关注点) 一般设置为数组第一个元素 其实任何一个都可以。然后接下来就是排序了
定义两个循环 一个 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) 编辑 收藏 举报