为什么我的排序代码无法正常工作?

时间:2019-05-05 19:32:27

标签: java sorting

我有一个整数数组,我需要:对前一半升序排序,对另一半降序排序。我不知道这是为什么无法按我想要的原因。

        for(i = 0 ; i < array.length/2 - 1 ; i++){
            ok = false;
            for(j = i ; j < array.length/2 - 1 ; j++){
                if(array[j]>array[j+1]){
                    tempValue = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tempValue;
                    ok = true;
                }
            }
            if(ok == false)
                break;
        }

        for(i = array.length/2 ; i < array.length - 1 ; i++){
            ok = false;
            for(j = i ; j < array.length - 1; j++){
                if(array[j]<array[j+1]){
                    tempValue = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tempValue;
                    ok = false;
                }
            }
             if(ok == false)
                 break;
        }

Expected result: [4,1,2,5,6,8,7,9] - > [1,2,4,5,9,8,7,6].

Result in my code: [1,2,4,5,8,7,9,6].

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误。 在对另一半数组进行排序时,主要是ok=false
下面的代码工作正常。

 public class MyClass {
        public static void main(String args[]) {
            int i,j,tempValue;
            int array[]= {4,1,2,5,3,6,8,7,10,9};
            boolean ok=true;

            for(i = 0 ; i < array.length/2  ; i++){
                    ok = false;
                    for(j = i ; j < array.length/2  ; j++){
                        if(array[j]>array[j+1]){
                            tempValue = array[j];
                            array[j] = array[j+1];
                            array[j+1] = tempValue;
                            ok = true;
                        }
                    }
                    if(ok == false)
                        break;
                }
                for(i = array.length/2 ; i < array.length  ; i++){
                    ok = false;
                    for(j = array.length/2 ; j < array.length - 1; j++){
                        if(array[j]<array[j+1]){
                            tempValue = array[j];
                            array[j] = array[j+1];
                            array[j+1] = tempValue;
                            ok = true;
                        }
                    }
                     if(ok == false)
                         break;
                }

        for(i = 0 ; i < array.length  ; i++){
        System.out.print(array[i]);
      }
        }
    }