我有一个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调用的单独的类中。我在网上看了看,找不到任何东西。有人可以告诉我如何实现这种算法的比较吗?
答案 0 :(得分:1)
您需要使用Compare方法而不是使用运算符来实现比较。请在此处查看完整答案(回答帖子):how to count heapsort key comparisons