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

     1 public static int adjustArray(int[] a, int first, int last){
     2         int i = first;
     3         int j = last;
     4         //取第一个数为基准数,也就是第一个坑
     5         int x = a[i];
     6         while (i < j){
     7             //从右向左找小于x的数来填坑
     8             //a[j]等于x或比x大则继续往左找
     9             while (i < j && a[j] >= x){
    10                 j--;
    11             }
    12             //当找到a[j]比x小的数时,要先判断此时i是否小于j
    13             //然后把a[j]填入a[i]中,此时a[j]成为新的坑
    14             if (i < j){
    15                 a[i] = a[j];
    16                 i++;
    17             }
    18             //接着从左往右找大于等于x的数来填坑
    19             //a[i]比x小则继续往右找
    20             while (i < j && a[i] < x){
    21                 i++;
    22             }
    23             //当找到a[i]大于等于x的数时,要先判断此时i是否小于j
    24             //然后把a[i]填入a[j]中,此时a[i]成为新的坑
    25             //然后这整个过程一直持续到i = j的时候退出
    26             if (i < j){
    27                 a[j] = a[i];
    28                 j--;
    29             }
    30         }
    31         //退出时,i = j,最后将x填到这个坑中
    32         a[i] = x;
    33         //返回的这个数为基准数最后落到的坑的位置,此时,基准数前面的数都比它小,后面的数都比他大
    34         //接下来要做的事情,是对基准数左边的部分和右边的部分重复这个方法
    35         return i;
    36     }
    37     
    38     public static void quick_sort1(int[] a, int first, int last){
    39         //刚开始肯定first比last小的,毕竟fisrt是0,last是a.length - 1;
    40         if (first < last){
    41             int i = adjustArray(a, first, last);
    42             //然后不断递归对i位置左边的那部分和i位置右边那部分调用此方法
    43             //直到调用不了为止,就排好序了
    44             quick_sort1(a, first, i - 1);
    45             quick_sort1(a, i + 1, last);
    46         }
    47     }
    48     
    49     //将以上两个方法合起来就是:
    50     public static void quick_sort(int[] a, int first, int last){
    51         if (first < last){
    52             int i = first;
    53             int j = last;
    54             int x = a[i];
    55             while (i < j){
    56                 while (i < j && a[j] >= x){
    57                     j--;
    58                 }
    59                 if (i < j){
    60                     a[i] = a[j];
    61                     i++;
    62                 }
    63                 while (i < j && a[i] < x){
    64                     i++;
    65                 }
    66                 if (i < j){
    67                     a[j] = a[i];
    68                     j--;
    69                 }
    70             }
    71             a[i] = x;
    72             quick_sort1(a, first, i - 1);
    73             quick_sort1(a, i + 1, last);
    74         }
    75     }

    Written on October 16th, 2019

  • 相关阅读:
    使用ANY、Some或All关键字
    Exists 和 Not Exists
    in和not in
    斐波那契数列 迭代与递归效率对比
    欧几里得算法
    递归
    字符长串破解密码
    对return函数的认识
    global与nonlocal关键字总结
    闭包
  • 原文地址:https://www.cnblogs.com/LittleMike/p/11687112.html
Copyright © 2011-2022 走看看