每次去回忆快排算法时,都会忘记具体的步骤,总是思考一阵子再看看网上的资料才回想起来,现在记载一下思路,免得以后忘了。
重点就在这个partition上面,如何有效地在原始空间上进行partition并不是一个很难的问题,但构思确实有一些巧妙。
下面的算法思路:
i 用来维护小于分界的值,只要比较得出小于分界,就把它放在i 的后面。
一个实例进行解释说明:
以上截图与算法分析均借鉴于博客: 对快速排序算法性能分析
public class Quicksort {
public static void quickSort(int[] num, int i, int j){
if(i<j){
int q = i-1;
int k = num[j];
for(int h = i; h<=j; h++){
if(num[h]<k){
// exchange num[q+1] and num[h]
int tmp = num[q+1];
num[q+1] = num[h];
num[h] = tmp;
q++;
}
}
// set num[j] = num[q+1]
num[j] = num[q+1];
// partition num[q+1] every turn
num[q+1] = k;
quickSort(num,i,q);
quickSort(num,q+2,j);
}
}
public static void main(String[] args){
int[] num = {2,4,7,3,5,8};
quickSort(num,0,num.length-1);
for(int i=0;i<num.length;i++){
System.out.println(num[i]);
}
}
}