在研究快速排序。
用这样的思路:
    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.   

    你只是把temp、smaller和keyElement这些值换来换去,没有实际的对数组进行操作
      

  2.   

    楼上说的很对,你没有把值赋回去。注意红色那句。
    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; 
      

  3.   

    方法改为
    public int[] quickSort(int[] src){ 
       //处理过程 ......
       return src;

    main 中:
    src =sort.quickSort(src); 
      

  4.   

    lss也不完全额,还要对src[0]操作
    ls显然不对……而且lz这样貌似只作了一次……快速排序显然不可能一个循环就完成的……还需要一个递归过程的吧
      

  5.   

    而且貌似lz的这一次做的也不对,只动right,left一点都没动………………
      

  6.   


    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;
                }
            }
    结果就正确了