快排算法的简单实现

Posted Qcer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快排算法的简单实现相关的知识,希望对你有一定的参考价值。

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;}需要检查,否则在某些情况下会出错。

以上是关于快排算法的简单实现的主要内容,如果未能解决你的问题,请参考以下文章

排序算法的实现(归并,快排,堆排,希尔排序 O(N*log(N)))

四中基本排序算法几Java实现(冒泡选择插入快排)

C语言快排

七大排序算法(插排,希尔,选择排序,堆排,冒泡,快排,归并)--图文详解

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)

常见排序算法基本原理及实现(快排,归并,堆排,直接插入.....)