zoukankan      html  css  js  c++  java
  • 快排算法的简单实现

    java实现:

    细节和注解都在注释在代码中了。

     1     private static int position(int[] ary,int low,int high){
     2         int i = low,j = high+1;
     3         int pivot = ary[low];//选定中轴元素
     4         while(true){
     5             while(ary[++i] < pivot) {//遇到大于等于pivot时停下
     6                 if (i == high) {break;}//此处有必要检查,当pivot刚好为当前序列的最大值时,从此处break出来。
     7             }
     8             while(ary[--j] > pivot){//遇到小于等于pivot时停下
     9                 if(j == low){break;}//此处可无需检查,因为j==low时,ary[j] == ary[low],必会在while检查时停下。
    10             }
    11 //            System.out.println("i:"+i+"---"+"j:"+j);
    12             if (i >= j) {break;}//退出主循环,注意,i有可能大于j
    13             swap(ary, i, j);
    14         }
    15         swap(ary, low, j);//因为j停下的位置时是小于等于pivot,因此应当让pivot和ary[j]交换
    16         return j;//返回pivot在全局下的次序位置
    17     }
    18     public static void quickSort(int[] ary,int low,int high){
    19         if(low >= high){return;}//递归基,单个元素自然有序
    20         int position = position(ary, low, high);
    21         quickSort(ary, low, position-1);//low到position-1中的所有元素均<=ary[position]
    22         quickSort(ary, position+1, high);//position+1到high中的所有元素均>=ary[position]
    23     }

    一些值得注意的细节问题:

    1、i从low开始,j从high+1开始;i和j指针移动过程中采用++i和--j的形式。

    2、if (i == high) {break;}需要检查,否则在某些情况下会出错。

  • 相关阅读:
    linux shell编程学习笔记(二) --- grep命令
    linux shell编程学习笔记(一)---通配符,元字符
    正则表达式
    leetcode problem 37 -- Sudoku Solver
    leetcode problem 33 -- Search in Rotated Sorted Array
    linux 终端快捷键
    linux中的sticky bit
    集中不等式
    Python os模块实例之遍历目录及子目录指定扩展名的文件
    Python模块之ConfigParser
  • 原文地址:https://www.cnblogs.com/qcblog/p/7535165.html
Copyright © 2011-2022 走看看