在研究快速排序。
用这样的思路:
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]; for(int i = right;i> -1;i--){
int temp;
int smaller = src[i];
if(smaller < keyElement){
temp = smaller;
smaller = keyElement;
keyElement = temp;
right = i;
break;
}
}
}
public static void main(String[] args) {
Sort sort = new Sort();
int[] src = {49,38,65,97,76,13,27};
sort.quickSort(src);
} 第一步应该是 27 38 65 97 76 13 49
但是我还是原来的顺序,但是debug中 smaller和keyElement确实改变了,为什么输出还是这么多?
有什么问题吗?
按照这个思路应该怎么做呢
用这样的思路:
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]; for(int i = right;i> -1;i--){
int temp;
int smaller = src[i];
if(smaller < keyElement){
temp = smaller;
smaller = keyElement;
keyElement = temp;
right = i;
break;
}
}
}
public static void main(String[] args) {
Sort sort = new Sort();
int[] src = {49,38,65,97,76,13,27};
sort.quickSort(src);
} 第一步应该是 27 38 65 97 76 13 49
但是我还是原来的顺序,但是debug中 smaller和keyElement确实改变了,为什么输出还是这么多?
有什么问题吗?
按照这个思路应该怎么做呢
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;
right = i;
break;
public int[] quickSort(int[] src){
//处理过程 ......
return src;
}
main 中:
src =sort.quickSort(src);
ls显然不对……而且lz这样貌似只作了一次……快速排序显然不可能一个循环就完成的……还需要一个递归过程的吧
for (int i = right; i > -1; i--) {
int temp;
int smaller = src[i];
if (smaller < keyElement) {
temp = smaller;
smaller = keyElement;
keyElement = temp;
right = i;
src[i] = smaller;
src[0] = temp; break;
}
}
结果就正确了