Почему мой алгоритм сортировки не работает после 3-й итерации цикла for? - PullRequest
0 голосов
/ 30 сентября 2018

/ * Это приглашение:

начинается с несортированного массива a

вывод: отсортированный массив a.

Найдите наименьший элемент в массиве a [1: n], назовите это [j].Поменяйте его местами с [0], если он меньше, чем [0].Повторите этот процесс с индексами 1, 2, ..., пока не будет отсортирован массив who.* /

public class assing2 {

public static void main(String args[]) 
{ 
    //array of ints
    int[] A = new int[] {33, 20, 8, 11, 5};
    int min_id = 0;

    int temp_i = 0;
    //int temp_max = 0;


    for (int i = 0; i < A.length; i++) 
    {
        min_id = i;
        temp_i = A[i];

        for (int j = 1; j < A.length; j++)
        {
            if (A[min_id] > A[j])
            {
                min_id = j;

            }
        }


        A[i] = A[min_id];
        A[min_id] = temp_i;


    }

    System.out.println("Sorted array"); 
    for ( int i = 0; i < A.length; i++)
    {
        System.out.println(A[i]);
    }

} 

}

Это вывод

Сортированный массив

5

20

11

33

8

Когда я запускаю его в отладчике, я вижу, что первые 2 итерации первого цикла for выглядят так, как будто он работает, но после этого он не отсортировал то, что было отсортировано.

Что не так с моей логикой?

1 Ответ

0 голосов
/ 30 сентября 2018
for (int j = 1; j < A.length; j++) 

неправильно.Вы должны проверять только элементы после i, так как элементы перед i сортируются по предыдущим итерациям.Так что это должно быть

for(int j = i+1; j < A.length; j++) 

Также в первом цикле вам не нужно ничего делать с последним элементом.Вы можете изменить условие остановки на i<A.length-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...