您的位置:首页 > 编程语言 > Java开发

java快速排序实现

2016-07-20 19:23 337 查看
最近读《java常用算法》,对书中快排实现的逻辑解释如下

public static void quickSort(int[] arr, int left, int right) {

int f, t;
int rtemp, ltemp;
f = arr[(left + right) / 2];// 分界值
ltemp = left;
rtemp = right;

while (ltemp < rtemp) {

while (arr[ltemp] < f) { // 找到左边不小于分界值的数值位置 a
++ltemp; // 移动
}

while (arr[rtemp] > f) { // 找到右边不大于分界值的数值位置 b
--rtemp; // 移动
}
if (ltemp <= rtemp) { // 如果此时 a的位置在b位置左边 交换
t = arr[ltemp];
arr[ltemp] = arr[rtemp];
arr[rtemp] = t;
++ltemp; //继续移动左边
--rtemp; //继续移动右边
}
}
if (ltemp == rtemp) { //此处注释的话会少循环一次,但是书里有这个逻辑,暂时不明白为什么
ltemp++;
}
System.out.print("f:"+f+"  ");
for (int i : arr) {
System.out.print(i + ",");
}
System.out.println();
if (left < rtemp) { //如果右边的指针没有移动到最左边 继续递归左边部分
quickSort(arr, left, ltemp - 1);
}
if (right > ltemp) {//如果左边的指针没有移动到最右边 继续递归右边部分
quickSort(arr, rtemp + 1, right);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: