实测:此方法效率差。
有兴趣的话,可以我的参考另一篇,以一边为基数的快速排序法
/**
* 快速排序法
* @param arr 需排序的数组
*/
public void quickSort(int[] arr,int left,int right) {
//设置临时的左右下标
int rtemp=right,ltemp=left;
//以中间位置为分界值,
int middle=(left+right)/2;
int f=arr[middle];
int t;
//找到左侧比右侧大的值,进行交换
while(ltemp<rtemp){
//从两侧向中间找,直至找到中间位置
//找到左边比分界值大的值
while(arr[ltemp]<=f&<emp<middle) {
++ltemp;
}
//找到右边比分界值小的值
while(arr[rtemp]>=f&&rtemp>middle) {
--rtemp;
}
//交换找到的值
if(ltemp<=rtemp) {
if(ltemp==rtemp) {
break;
}
t=arr[ltemp];
arr[ltemp]=arr[rtemp];
arr[rtemp]=t;
f=arr[middle];
//交换完成后移动一位,继续比较后面的值
ltemp=left;
rtemp=right;
}
}
//保证每次比较完成之后ltemp=rtemp+1
if(ltemp==rtemp) {
ltemp++;
}
System.out.print("快速排序结果为:");
for (int num : arr) {
System.out.print(" "+num);//遍历输出当前的数组
}
System.out.println();//换行
//此时左侧数据全部小于右侧数据,分别对左侧及右侧递归调用
if(left<rtemp) {
quickSort(arr, left, ltemp-1);
}
if(ltemp<right) {
quickSort(arr, rtemp+1, right);
}
}