zoukankan      html  css  js  c++  java
  • 快速排序--递归法

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

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

        定义两个循环 一个 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 }
  • 相关阅读:
    JAVA泛类型(汽车Demo)
    java自定义事件机制分析
    ExtJS自定义事件
    模块化设计进化
    面向服务的SOA架构与服务总线ESB
    数据加密数字签名
    面试题
    一点ExtJS开发的感悟
    学习代理模式
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/csong7876/p/8647857.html
Copyright © 2011-2022 走看看