花了两个小时编写了一个快速排序,没有和其他写法对比过,但实现了功能,可以参考
public class Fast {
public static void main(String[] args) {
int[] a = new int[]{3,1,7,5,2,6,14,13,11,4};
// 从小到大排列
doSort(a,0,a.length - 1);
for(int num : a){
System.out.print(num + ",");
}
}
static private void doSort(int[] b,int start,int end){
if (start < end ){
// 两个数交换时的临时变量
int temp;
// m 记录此时标准值的下标
int m = start;
// 默认选第一个元素作为标准
int standard = b[start];
for (int i = start; i < end; i++){
// 如果第二个数小于标准值... 第三个数小于标准值... 依次判断
if (standard > b[i+1] ){
// 不相邻的两个,把它们中间的数依次往后移动一下
// i > m 针对如下情况: 13627 3和2交换位置走这个逻辑
if (i > start && i > m){
temp = b[i+1];
while(i != m - 1){
b[i+1] = b[i];
i--;
}
b[m] = temp;
} else {
// 相邻的两个比较,直接交换
temp = b[i];
b[i] = b[i+1];
b[i+1] = temp;
}
// 交换过后下标后移一位
m++;
}
}
doSort(b,start,m-1);
doSort(b, m + 1, end);
}
}
}