zoukankan      html  css  js  c++  java
  • 关于快速排序的Java代码实现

    快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    实现方式一:

     1 package test1;
     2 
     3 public class QuicSort {
     4     /*
     5      * 使用快速排序
     6      * arras:要排序的数组
     7      * low:数组的开始下标
     8      * hight:数组的末尾下标
     9      */
    10     public void sort(int[] arras,int low,int hight){
    11         int i = low;
    12         int j = hight;
    13         if(i>j){
    14             return ;
    15         }
    16         //基准元素
    17         int key = arras[low];
    18         while(true){//让一趟里面的全部元素都比较完毕
    19             //j往前走
    20             while(j>i){
    21                 if(arras[j] < key){
    22                     //交换
    23                     int temp = arras[j];
    24                     arras[j] = arras[i];
    25                     arras[i] = temp;
    26                     break;
    27                 }else{
    28                     j--;
    29                 }
    30             }
    31             //i往后走
    32             while(j>i){
    33                 if(arras[i] > key){
    34                     //交换
    35                     int temp = arras[j];
    36                     arras[j] = arras[i];
    37                     arras[i] = temp;
    38                     break;
    39                 }else{
    40                     i++;
    41                 }
    42             }
    43             if(i ==j){
    44                 break;
    45             }
    46         }
    47         //基准左边的数组排序
    48         sort(arras,low,i-1);
    49         //基准右边的数组排序
    50         sort(arras,i+1,hight);
    51     }
    52     /*
    53      * 打印数组里面的元素
    54      */
    55     public void print(int[] arras){
    56         for(int i=0 ; i<arras.length;i++){
    57             if(i==arras.length-1){
    58                 System.out.println(arras[i]);
    59             }else{
    60                 System.out.print(arras[i]+",");
    61             }
    62         }
    63     }
    64     public static void main(String[] args) {
    65         int[] as = {49,38,65,97,76,13,27};
    66         QuicSort qs = new QuicSort();
    67         qs.sort(as,0,as.length-1);
    68         qs.print(as);
    69     }
    70 }

    实现方式二:

     1 package test1;
     2 
     3 public class QuickSort1 {
     4     int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99,
     5             98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 };
     6     public QuickSort1() {
     7         quick(a);
     8         for (int i = 0; i < a.length; i++)
     9             System.out.println(a[i]);
    10     }
    11     public int getMiddle(int[] list, int low, int high) {
    12         int tmp = list[low]; // 数组的第一个作为中轴
    13         while (low < high) {
    14             while (low < high && list[high] >= tmp) {
    15                 high--;
    16             }
    17             list[low] = list[high]; // 比中轴小的记录移到低端
    18             while (low < high && list[low] <= tmp) {
    19                 low++;
    20             }
    21             list[high] = list[low]; // 比中轴大的记录移到高端
    22         }
    23         list[low] = tmp; // 中轴记录到尾
    24         return low; // 返回中轴的位置
    25     }
    26     public void _quickSort(int[] list, int low, int high) {
    27         if (low < high) {
    28             int middle = getMiddle(list, low, high); // 将list数组进行一分为二
    29             _quickSort(list, low, middle - 1); // 对低字表进行递归排序
    30             _quickSort(list, middle + 1, high); // 对高字表进行递归排序
    31         }
    32     }
    33     public void quick(int[] a2) {
    34         if (a2.length > 0) { // 查看数组是否为空
    35             _quickSort(a2, 0, a2.length - 1);
    36         }
    37     }
    38 }
  • 相关阅读:
    Flutter 路由管理
    SpringMVC 集成 MyBatis
    关于windows下安装mysql数据库出现中文乱码的问题
    md5.digest()与md5.hexdigest()之间的区别及转换
    MongoDB基础命令及操作
    redis相关操作&基本命令使用
    python中mysql主从同步配置的方法
    shell入门基础&常见命令及用法
    ORM总结
    多任务:进程、线程、协程总结及关系
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4082659.html
Copyright © 2011-2022 走看看