使用 C# 在 Heapsort 中计算比较

Counting comparisons in Heapsort using C#

我有堆排序算法。

private int heapSize;

    private void BuildHeap(int[] arr)
    {
        heapSize = arr.Length - 1;
        for (int i = heapSize / 2; i >= 0; i--)
        {
            Heapify(arr, i);
        }
    }

    private void Swap(int[] arr, int x, int y)//function to swap elements
    {
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;

    }
    private void Heapify(int[] arr, int index)
    {
        int left = 2 * index + 1;
        int right = 2 * index + 2;
        int largest = index;
        if (left <= heapSize && arr[left] > arr[index])
        {
            largest = left;
        }

        if (right <= heapSize && arr[right] > arr[largest])
        {
            largest = right;
        }

        if (largest != index)
        {
            Swap(arr, index, largest);
            Heapify(arr, largest);
        }
    }
    public int PerformHeapSortTest(int[] arr)
    {
        int counter = 0;
        BuildHeap(arr);
        for (int i = arr.Length - 1; i >= 0; i--)
        {
            Swap(arr, 0, i);
            heapSize--;
            Heapify(arr, 0);
        }
   DisplayArray(arr);
    }
  Private void DisplayArray(int[] arr)
    {
      for (int i = 0; i < arr.Length; i++)
         {Console.Write("{0}\n", arr[i])}
    }

我想计算比较次数,但不明白如何使用这个堆排序算法来实现它,它位于我从 main 调用的单独 class 中。我在网上四处张望,找不到任何东西。有人可以告诉我如何与该算法进行比较吗?

您需要使用 Compare 方法而不是运算符来实现比较。请在此处查看完整答案(答案 post):how to count heapsort key comparisons