- #include <stdio.h>
- #include <stdlib.h>
- void HeapAdjust(int arr[], int i, int length)
- {
- int Child;
- int temp;
- for(;2 * i + 1 < length; i = Child)
- {
-
- Child = 2 * i + 1;
-
- if(Child < length - 1 && arr[Child + 1] > arr[Child])
- ++Child;
-
-
- if(arr[i] < arr[Child])
- {
- temp = arr[i];
- arr[i] = arr[Child];
- arr[Child] = temp;
- }
- else
- break;
- }
- }
- void HeapSort(int arr[], int length)
- {
- int i;
-
-
- for(i = length/2 - 1; i >= 0; --i)
- HeapAdjust(arr, i, length);
-
-
-
-
-
-
- for(i = length - 1; i > 0; --i)
- {
- arr[i] = arr[0]^arr[i];
- arr[0] = arr[0]^arr[i];
- arr[i] = arr[0]^arr[i];
- HeapAdjust(arr, 0, i);
- }
- }
-
- int main()
- {
- int i;
- int num[] = {98, 48, 777, 63, 57, 433, 23, 1112, 1};
- printf("==================堆排序==============\n");
- printf("实质上是一颗完全二叉树,利用树的根结点\n与子节点的性质进行排序\n");
- printf("======================================\n\n");
- printf("待排序的数据是:\n");
- for(i = 0; i < sizeof(num)/sizeof(int); i++)
- {
- printf("%d ", num[i]);
- }
- printf("\n");
- HeapSort(num, sizeof(num)/sizeof(int));
- printf("排序后的数据是:\n");
- for(i = 0; i < sizeof(num)/sizeof(int); i++)
- {
- printf("%d ", num[i]);
- }
- printf("\n");
- return 0;
- }

c 堆排序
原文:http://www.cnblogs.com/jrsflak/p/7774895.html