Почему эта сортировка вставки возвращает индекс вне диапазона исключений? - PullRequest
0 голосов
/ 29 сентября 2018

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

using System;
using System.Collections.Generic;

class MainClass {
    public static void Main (string[] args) {
        int[] unsortedArray = {23, 19, 21, 44, 40, 60, 73, 80, 38, 55, 29, 78, 83, 61, 63, 9, 93, 6, 51, 11};
        //Sets the unsorted list

        Console.WriteLine ("Insertion Sort");
        for (int i = 0; i < 20; i++) {
          Console.Write(unsortedArray[i] + " , ");
        }
        //Displays a welcome message and the unsorted list

        Console.WriteLine();
        Console.WriteLine();
        //Makes a gap between the unsorted and sorted list

        List<int> sortedArray = new List<int>();
        //Creates a new list for the sorted list

        for (int i = 0; i < 19; i++) {
          if (unsortedArray[i] < unsortedArray[i + 1]) {
            sortedArray[i] = unsortedArray[i];
            //If the next item in the unsorted list is less than or equal to the one after,
            //it is added to the next spot in the sorted list.
          }
          else if (unsortedArray[i] > unsortedArray[i + 1]) {
            sortedArray[i] = unsortedArray[i + 1];
            //If the next item in the unsorted list is greater than the one after, it is
            //moved behind one place and added to the sorted list before.
          }
        }


        for (int i = 0; i < 19; i++) {
          Console.Write(sortedArray[i] + ", ");
          //Displays the sorted array
        }

    }
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Как сказано в ответе Алекса, вы не можете присвоить значение List с индексом без какого-либо предыдущего присваивания.

Кроме того, ваша логика совершенно неверна.Вам нужно 2 петли.Первый цикл, который перебирает членов несортированного массива.Второй цикл, который перебирает членов отсортированного списка.Пожалуйста, прочитайте больше здесь

Алгоритм следующий.

For each element of the unsorted array

    Find the position that the element in the sorted array (list in your case), by looping the sorted list and comparing the values
    Push all the elements after that position, one index.
    Insert the element in the position specified

Я не дам вам код.Хотя есть решение для c # в ссылке.Тем не менее, я предлагаю вам попытаться решить эту проблему, понимая алгоритм

0 голосов
/ 29 сентября 2018

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

        int[] unsortedArray = { 23, 19, 21, 44, 40, 60, 73, 80, 38, 55, 29, 78, 83, 61, 63, 9, 93, 6, 51, 11 };

        List<int> sortedArray = new List<int>(unsortedArray);
        sortedArray.Sort();
0 голосов
/ 29 сентября 2018

Вероятно, это ваша ошибка:

List<int> sortedArray = new List<int>();
// ..
sortedArray[i] = // ..

Нельзя присвоить значение для List с индексом без какого-либо предыдущего назначения.Вам нужно либо изменить свой список на массив, либо использовать вместо него add.

Также;Вы не должны называть объекты списка «массивом», это только смущает людей.

...