返回信息流private static void quickSort(int[] array,int index, int last){
if(index < last){
int q = partition(array, index, last);
quickSort(array, index, q);
quickSort(array, q+1, last);
}
}
private static int partition(int[] array, int index, int last){
int value = array[index];
int left = index ;
int right = last ;
while(true){
while(left < right && array[right] > value){
right -- ;
}
while(left < right && array[left] < value){
left ++ ;
}
if(left < right){
int key = array[left] ;
array[left] = array[right];
array[right] = key ;
}else{
return right;
}
}
}
快排的两个方法,当数组没有重复数时没问题,但有重复的时候就不对了,求如何纠正 谢谢了
这是一条镜像帖。来源:北邮人论坛 / java / #17854同步于 2011/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java快速排序请教
Yy4frantic
2011/4/5镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
quickSort在partition的时候分解成两个,其中array[q]是不在里面的
quickSort(array, index, q-1);
quickSort(array, q+1, last);
【 在 Yy4frantic (爱昵) 的大作中提到: 】
: private static void quickSort(int[] array,int index, int last){
: if(index < last){
: int q = partition(array, index, last);
: ...................
有相同元素的时候patition函数死循环了
while(left<right && array[right] >= value)
【 在 Yy4frantic (爱昵) 的大作中提到: 】
: q-1的问题我试过了 还是不行
private static void quickSort(int[] array,int index, int last) {
if(index < last){
int q = partition(array, index, last);
quickSort(array, index, q-1);
quickSort(array, q+1, last);
}
}
private static int partition(int[] array, int index, int last) {
int value = array[index];
int left = index ;
int right = last ;
while(left < right){
while(left < right && array[right] >= value){
right -- ;
}
array[left] = array[right];
while(left < right && array[left] <= value){
left ++ ;
}
array[right] = array[left];
}
array[left] = value;
return left;
}