class HeapSort { public void Sort(int[] a) { // Turn the array into a max heap for (int i = (a.Length / 2) - 1; i >= 0; i--) { MaxHeapify(a, i, a.Length); } // Remove the largest element from the max heap and put it on the end, // and then max heapify the heap which is now 1 smaller for (int i = a.Length - 1; i >= 1; i--) { Swap(a, 0, i); MaxHeapify(a, 0, i); } } private void MaxHeapify(int[] a, int i, int n) { int idxLeft = (i + 1) * 2 - 1; int idxRight = (i + 1) * 2 - 1 + 1; int largest = i; if (idxLeft < n && a[idxLeft] > a[largest]) { largest = idxLeft; } if (idxRight < n && a[idxRight] > a[largest]) { largest = idxRight; } if (largest != i) { Swap(a, i, largest); MaxHeapify(a, largest, n); } } private void Swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } }
Sunday, May 01, 2016
Heap sort implementation in C#
Here's a heap sort implementation in C#:
Subscribe to:
Posts (Atom)