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

    排序-快速排序

    基本思想: 将数据划分为两部分,左边的所有元素都小于右边的所有元素;然后,对左右两边进行快速排序。

    划分方法: 选定一个参考点(中间元素),所有元素与之相比较,小的放左边,大的放右边。

    具体步骤: 选择第一个元素作为中间元素。

    (1)先保存该元素的值到其它位置,腾出其空间。

    (2)从后往前搜索一个比中间数小的元素,并将其放置到前面的这个空位上。

    (3)从前往后搜索一个比中间数大的元素,并将其放置到后面的这个位置上。

    重复(2),(3),直到两边搜索的空位重合,此时将中间元素放在该空位中。

    平均时间:O(nlogn)

    最好情况:O(nlogn)

    最坏情况:O(n2)

    辅助空间:O(logn)

    稳定性:不稳定

    适用场景:n比较大时

    代码实现:

     1   public static void quickSort(int[] list){
     2         quickSort(list, 0, list.length-1);
     3     }
     4     private static void quickSort(int []list,int left,int right){
     5         int cutPoint = 0;
     6         if(left < right){
     7             cutPoint = partion(list,left,right);
     8             quickSort(list, left, cutPoint-1);
     9             quickSort(list, cutPoint+1, right);
    10         }
    11     }
    12 
    13     private static int partion(int []list, int left, int right) {
    14         int cutPointValue = list[left];
    15         while(left != right){
    16             while(left < right && cutPointValue < list[right])right--;
    17             if(left < right){
    18                 list[left] = list[right];
    19                 left++;
    20             }
    21             
    22             while(left < right && cutPointValue > list[left])left++;
    23             if(left < right){
    24                 list[right] = list[left];
    25                 right--;
    26             }
    27         }
    28         list[left] = cutPointValue;
    29         return left;
    30     }
  • 相关阅读:
    JVM调优总结(转载)
    项目应该如何分层(转载)
    SpringCloud Feign 配置(基于Consul)
    yml配置文件嵌套
    SpringCloud Zuul基于Consul配置及详解
    springBoot聚合项目打包
    SpringCloud Config 配置(基于Consul)
    hibernate的三种状态
    IOS 图片全屏预览
    IOS 下拉菜单
  • 原文地址:https://www.cnblogs.com/yang--yang/p/4855478.html
Copyright © 2011-2022 走看看