В этом коде сортировки выбора я получаю из {8,3,5,9,2} ответа массива {2,3,3,5} - PullRequest
0 голосов
/ 01 октября 2018

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

package sorting;
public class soring {
    public static void selectionsort(int [] a ) {
        for (int i = 0; i < a.length - 1; i++) {
            int minindex = i; 
            int min = a[minindex];
            for(int j=i+1; j<a.length; j++) {
                if(min>a[j]) 
                    min = a[j];
                minindex = j;
            }
            a[minindex]=a[i];
            a[i]=min;
        }
    }

    public static void display (int []a) {
        for (int i =0 ; i<a.length-1 ;i++) {
            System.out.println(a[i]);
        }
    }

    public static void main(String[] args) {
        int [] a = {8,3,5,9,2};
        soring.selectionsort(a);
        soring.display(a);
    }
}

1 Ответ

0 голосов
/ 01 октября 2018

Первая проблема:

for (int i =0 ; i<a.length-1 ;i++) {
   System.out.println(a[i]);
}

В вашем методе display() вы выполняете цикл до тех пор, пока длина не станет меньше минус один, что не будет отображать последнее значение.Измените это на i<a.length

И снова в вашем методе selectionsort() вы зацикливаетесь так, чтобы последний элемент никогда не касался.Во-вторых, вам не хватает скобок вокруг одного из ваших if утверждений.Это делает так, чтобы строка minindex = j; не находилась внутри блока if и поэтому всегда выполнялась.Изменить:

if(min>a[j]) 
   min = a[j];
   minindex = j ;

На:

if(min>a[j]) {
     min = a[j];
     minindex = j ;
 }
...