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

    快速排序算法是一种较为高效的排序算法,采用了“挖坑填数+分而治之”的思想。该算法的时间复杂度最好时为O(nlogn),最差时为O(n^2),空间复杂度为O(logn),也是不稳定的,适合n值较大的排序任务。

    该算法的基本思想是:每次排序都找一个基准位,使得基准位前端的部分每个数都小于该基准位上的数,基准位后端的部分每个数都大于该基准位上的数,然后递归该过程,知道待排序序列中的所有元素都有序为止。

    快速排序算法的一种实现如下(Java版):

     1 /**
     2  * 快速排序(挖坑填数+分治法)
     3  * @author JiaJoa
     4  * 通过查找一个待排序的序列中的一个基准位置(一般以第一个数为基准),
     5  * 使得基准左边的都小于这个基准,基准右边的都大于这个基,
     6  * 然后使用递归等方法对左右两边执行同样的快速排序
     7  *
     8  */
     9 public class Algorithm_QuickSort {
    10     public static void main(String[] args){
    11         int[] data = new int[]{7,1,6,4,3,2,1,23};
    12         
    13         Algorithm_QuickSort.quickSort(data); 
    14     }
    15     
    16     //第一步,查找一个基准位
    17     public  static int getPart(int low,int high,int[] data){
    18         
    19         int comData = data[low]; //设定一个初始基准
    20         while(low<high){
    21             while(low<high&&data[high]>=comData){//从右向左查找
    22                 high--;
    23             }
    24             if(low<high){
    25                 data[low] = data[high]; //小于基准的移到低端
    26             }
    27             
    28             while(low<high&&data[low]<=comData){ //从左向右查找
    29                 low++;
    30             }
    31             if(low<high){
    32                 data[high]=data[low]; //大于基准的移到高端
    33             }
    34         }
    35         data[low] = comData; //基准位置不再变化时
    36         return low;
    37     }
    38     
    39     //第二步,采用递归的方式处理基准左右两堆
    40     public static void quick_Recursion(int low,int high,int[]data){
    41         
    42         int base;
    43         if(low<high){
    44             base = getPart(low,high,data);//获取基准
    45             quick_Recursion(low,base-1,data);//对低基准位段进行递归排序
    46             quick_Recursion(base+1,high,data);//对高基准位段进行递归排序
    47         }
    48     }
    49     
    50     //第三步,打印排序的序列
    51     public static void quickSort(int[] data){
    52         quick_Recursion(0,data.length-1,data);
    53         
    54         StringBuilder playnum = new StringBuilder();
    55         for(int i : data){
    56             playnum.append(i+",");
    57         }
    58         System.out.println(playnum.toString());
    59     }
    60 }
  • 相关阅读:
    Python几种主流框架
    Python测试框架
    Python测试工具开发
    robotFramework——通用的自动化测试框架
    依赖数据库的单元测试——DBUnit
    SpringTest——Spring在Junit上进一步封装,集成的测试模块
    linux---网络配置
    linux-----初学命令和理解
    Liunx----vi编辑器
    虚拟机---网络设置
  • 原文地址:https://www.cnblogs.com/JiaJoa/p/7810054.html
Copyright © 2011-2022 走看看