ArrayList сортировка некорректного порядка;Выбор сортировки - PullRequest
0 голосов
/ 27 апреля 2019

Мне пришлось кодировать Selection Sort, и раньше я использовал Array, и он работал отлично, но текстовые файлы были слишком большими, чтобы использовать Array, поэтому мне пришлось преобразовать код в ArrayList.Теперь происходит то, что (с большим текстовым файлом) большинство чисел отсортированы, но между отсортированными есть несколько несортированных чисел, думаю, что это может быть ошибкой дублирования ... Я попытался перейти в порядке убывания, и это делаетто же самое.Я использовал меньший текстовый файл, чтобы показать вывод.Все соответствующие методы приведены ниже.

public void SelectionSort() // ascending order
{

    for (int i = 1; i <= List.Count; i++) // go through the list
    {
        ListClass minimum = (ListClass)List[i-1];
        int min = i - 1;
        for (int j = i;j <= List.Count-1; j++)
        {
            ListClass cur = (ListClass)List[j];

            if (minimum.getNum() > cur.getNum())
                min = j; // min equals smallest in list j

        }
        swap(List, i-1, min); 
    }
    Console.WriteLine("Array after selection sort: ");
    foreach (ListClass cur in List)
    {
        cur.Display();
    }
public static void swap(ArrayList List, int x, int y)
{
    object temp = List[x];
    List[x] = List[y];
    List[y] = temp;
}
public void Display()
{
    foreach (ListClass cur in List)
    {
        cur.Display();
    }
}

Массив перед сортировкой: 1 2 5 7 8 90 889 88 654 33 2 3 Массив после сортировки выбора: 1 2 3 5 7 8 90 2 88 33 654 889

1 Ответ

2 голосов
/ 27 апреля 2019

вы не должны сравнивать минимум несортированной части с последним отсортированным значением и заменять его на это, вы просто должны найти минимум несортированной части и поменять его на первое несортированное значение (рядом с последним отсортированным значением)).

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