Почему моя сортировка кучи не работает, когда я использую массив больше 10?C # - PullRequest
0 голосов
/ 09 марта 2019

Код:

class Program
{
    static void HeapSort(int[] array, int n) 
    {
        for (int i = n / 2 - 1; i >= 0; i--) 
            Heapify(array, n, i);
        for (int i = n - 1; i >= 0; i--)       
        {
            int temp = array[0];
            array[0] = array[i];
            array[i] = temp;
            Heapify(array, i, 0);
        }
    }
    static void Heapify(int[] array, int n, int i)
    {
        int largest = i;                                   // largest = 4
        int left = 2 * i + 1;                              // left = 9 
        int right = 2 * i + 2;                             // right = 10
        if (left < n && array[left] > array[largest])      //ar left < 10 ir ar ar9 > ar4
            largest = left;                                //left tampa 
        if (right < n && array[right] > array[largest])
            largest = right;
        if (largest != i)
        {
            int swap = array[i];
            array[i] = array[largest];
            array[largest] = swap;
            Heapify(array, n, largest);
        }
    }
    public static void Main()
    {
        int[] arr = { 55, 25, 89, 34, 12, 19, 78, 95, 1, 100, 99, 98};
        int n = 12, i;
        Console.WriteLine("Heap Sort");
        Console.Write("Initial array is: ");
        for (i = 0; i < n; i++)
        {
            Console.Write(arr[i] + " ");
        }
        HeapSort(arr, 10);
        Console.Write("\nSorted Array is: ");
        for (i = 0; i < n; i++)
        {
            Console.Write(arr[i] + " ");
        }
        Console.ReadLine();
    }
}

Хорошо работает, когда я использую массив из 10, но если я добавляю элементы, они просто помещаются в конец массива.Пример:

int[] arr = { 55, 25, 89, 34, 12, 19, 78, 95, 1, 100};
        int n = 10, i;

Вывод: сортировка кучи Начальный массив: 55 25 89 34 12 19 78 95 1 100 Сортированный массив: 1 12 19 25 34 55 78 89 95 100

сейчас, если я добавлю еще пару:

int[] arr = { 55, 25, 89, 34, 12, 19, 78, 95, 1, 100, 99, 98, 120, 44};
        int n = 14, i;

Вывод: Сортировка кучи Начальный массив: 55 25 89 34 12 19 78 95 1 100 99 98 120 44 Сортированный массив: 1 12 19 25 34 55 7889 95 100 99 98 120 44

Почему он не сортирует остальные?

1 Ответ

0 голосов
/ 09 марта 2019

Я нашел ошибку. Я забыл изменить 10 в первом вызове HeapSort в функции Main, оставив там 10 вместо n. Изменение его на n решило проблему.

...