堆排序(c语言)

#include 
void heapify(int arr[], int root, int len) { int L = root * 2 + 1; int R = root * 2 + 2; int maxIndex = root; int temp; // 如果L还在数组当中 if (L < len && arr[maxIndex] < arr[L]) maxIndex = L; // 如果R还在数组当中 if (R < len && arr[maxIndex] < arr[R]) maxIndex = R; if (maxIndex != root) { temp = arr[root]; arr[root] = arr[maxIndex]; arr[maxIndex] = temp; heapify(arr, root, maxIndex); } } // 建堆 void buildHeap(int arr[], int len) { int i; for (i = len / 2 - 1; i >= 0; i--) { heapify(arr, i, len); } } // 排序 void heapSort(int arr[], int len) { int i, temp; buildHeap(arr, len); for (i = len - 1; i > 0; i--) { temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; heapify(arr, 0, i); } } int main() { int i; int arr[] = {9, 10, 8, 2, 3, 4, 1, 5, 6, 7}; heapSort(arr, 10); for (i = 0; i < 10; i++) printf("%d ", arr[i]); printf("\n"); return 0; }

 

你可能感兴趣的:(堆排序(c语言))