在研究快速排序。
用这样的思路:
1)设置两个变量I、J,排序开始的时候:I=1,J=N-1;
2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0];
3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换;
4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换;
5)重复第3、4步,直到 I=J; 下面是菜鸟的代码
public void quickSort(int[] src){
int len = src.length;
int left = 1;
int right = len - 1;
int keyElement = src[0];
int saveKeyElement = keyElement;
//49 38 65 97 76 13 27
for(int i = right;i> -1;i--){
int temp;
int smaller = src[i];
if(smaller < keyElement){
temp = smaller;
smaller = keyElement;
keyElement = temp;
src[i] = smaller;
src[0] = temp;
right = i;
break;
}
}
keyElement = src[right];
for(int j = left;j<len;j++){
int temp;
int bigger = src[j];
if(bigger > keyElement){
temp = bigger;
bigger = keyElement;
keyElement = temp;
src[j] = bigger;
src[right] = temp;
left = j;
break;
}
}
}
我已经完成了一次快速排序,下面要递归了。请问应该如何处理。
因为第二次开始的时候要考虑keyElement的位置。不是第一次的src[0]的值了。应该是src[left]的值
所以这里有点问题 谢谢高手
用这样的思路:
1)设置两个变量I、J,排序开始的时候:I=1,J=N-1;
2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0];
3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换;
4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换;
5)重复第3、4步,直到 I=J; 下面是菜鸟的代码
public void quickSort(int[] src){
int len = src.length;
int left = 1;
int right = len - 1;
int keyElement = src[0];
int saveKeyElement = keyElement;
//49 38 65 97 76 13 27
for(int i = right;i> -1;i--){
int temp;
int smaller = src[i];
if(smaller < keyElement){
temp = smaller;
smaller = keyElement;
keyElement = temp;
src[i] = smaller;
src[0] = temp;
right = i;
break;
}
}
keyElement = src[right];
for(int j = left;j<len;j++){
int temp;
int bigger = src[j];
if(bigger > keyElement){
temp = bigger;
bigger = keyElement;
keyElement = temp;
src[j] = bigger;
src[right] = temp;
left = j;
break;
}
}
}
我已经完成了一次快速排序,下面要递归了。请问应该如何处理。
因为第二次开始的时候要考虑keyElement的位置。不是第一次的src[0]的值了。应该是src[left]的值
所以这里有点问题 谢谢高手
解决方案 »
- 虚心求教!!下线等!!
- 如何操作JFreeChart生成的图?
- 请问怎么用JAVA调用word程序
- 在一个程序里先编译、后执行另外一个.java文件,该怎样写?
- 两个基础问题:1:java.sql.Date 2:ResultSet
- 请教:在客户机上,applet能不能建立与服务器oracle数据库的连接????(我是菜鸟)
- getBoolean()什么时候返回true?
- 想进一步学JAVA
- 谁能给我提供讲解抽象类,接口,造型的文章,谢谢 在线!!!!
- maven构建ssh项目出现bean错误,老是提示bean配置错误,无法找到sessionFactory bean
- java方法重写问题
- 自己实现的利用JMS来远程调用方法
都找到后,让被找到的2个元素调换位置! 然后继续比较!知道2次比较相遇!结果是,以相遇的那个位置为基准,前面的都是大的,后面的都是小的!这样,一个区间就分为2个区间,再次调用本方法!递归下去!
你的方法写错了!参数有3个!(int[] array , int beginIndex , int endIndex)
int l = left;
int r = right;
int m = data[left]; while (true) {
while (data[l] < m) {
l++;
}
while (data[r] > m) {
r--;
}
if (l < r) {
int temp = data[l];
data[l] = data[r];
data[r] = temp;
l++;
r--;
} else {
break;
}
} if (left < r) {
qsort(data, left, l - 1);
}
if (right > l) {
qsort(data, r + 1, right);
}
} // 用户接口
public static void qsort(int[] a) {
qsort(a, 0, a.length - 1);
} public static void main(String[] args) throws Exception {
Random r = new Random();
int[] data = new int[100];
for (int i = 0; i < data.length; i++) {
data[i] = r.nextInt(100);
} Sort.qsort(data); for (int i = 0; i < data.length; i++) {
System.out.println(data[i] + " ");
}
}
本来昨天想发的,不过觉得还是自己做好,现在有人发了那么我也帖下public void quickSort(int[] src, int left, int right) {
int i = left, j = right;
if (right - left <= 1)
return;
for (int ctrl = 0; i < j;) {
if (src[i] > src[j]) {
int temp;
temp = src[i];
src[i] = src[j];
src[j] = temp;
ctrl = 1 - ctrl;
}
i += ctrl;
j -= 1 - ctrl;
}
quickSort(src, left, i - 1);
quickSort(src, j + 1, right);
}