使用C#计算Heapsort中的比较

时间:2015-04-06 12:13:02

标签: c# sorting heapsort

我有一个heapsort算法。

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调用的单独的类中。我在网上看了看,找不到任何东西。有人可以告诉我如何实现这种算法的比较吗?

1 个答案:

答案 0 :(得分:1)

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