当我使用超过10的数组时,为什么我的堆排序不起作用? C#

问题描述 投票:0回答:1

码:

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 78 89 95 100 99 98 120 44

为什么不对其余部分进行排序?

heapsort
1个回答
0
投票

我发现了错误。我忘了在Main函数的第一个HeapSort调用中更改10,而在那里留下10而不是n。将其更改为n修复了问题。

© www.soinside.com 2019 - 2024. All rights reserved.