首页 > 解决方案 > 为什么我的排序代码不能正常工作?

问题描述

我有一个整数数组,我需要:前半部分升序排序,另一半降序排序。我不知道这不能按我的意愿工作的原因是什么。

        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].

标签: javasorting

解决方案


您的代码中有多个错误。主要是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]);
      }
        }
    }

推荐阅读