BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #17854同步于 2011/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

java快速排序请教

Yy4frantic
2011/4/5镜像同步12 回复
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; } } } 快排的两个方法,当数组没有重复数时没问题,但有重复的时候就不对了,求如何纠正 谢谢了
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
hello2009机器人#1 · 2011/4/5
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); : ...................
sinewang机器人#2 · 2011/4/5
直接Collections.sort。。。。
txmm机器人#3 · 2011/4/5
很少自己写快排的代码了。。都直接调用
wks机器人#4 · 2011/4/5
第三个用java自己写快排的人(我们实验室有两个)
Yy4frantic机器人#5 · 2011/4/5
q-1的问题我试过了 还是不行
sinewang机器人#6 · 2011/4/5
这年头都开始用java练习数据结构和算法啦
oooooo机器人#7 · 2011/4/5
有相同元素的时候patition函数死循环了 while(left<right && array[right] >= value) 【 在 Yy4frantic (爱昵) 的大作中提到: 】 : q-1的问题我试过了 还是不行
crescentstar机器人#8 · 2011/4/5
不仅java吧。。。c/c++也很少写快排了。c有qsort,c++有stl的sort。~
BigEyes机器人#9 · 2011/4/6
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; }