Почему мой код сортировки не работает должным образом? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть массив целых, и мне нужно: отсортировать первую половину по возрастанию, а другую - по убыванию.Я не знаю, по какой причине это не сработает так, как я хочу.

        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 Ответ

1 голос
/ 05 мая 2019

В вашем коде было несколько ошибок. При сортировке второй половины массива майор был 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]);
      }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...