算法导论--堆排序
2015-03-26 19:45
246 查看
堆排序的时间复杂度为nlg(n),堆排序还有一个重要的用途在优先队列上!
下面是最大堆排序的实现算法:
下面是最大堆排序的实现算法:
#include <stdio.h> int A[]={7,15,26,1,14,3,16,64,6,57}; int Heap_Size=sizeof(A)/4-1; void Max_Heapify(int *A,int i); //修复最大堆 void Build_Max_Heap(int *A); //建立堆 void HeapSort(int * A); //堆排序 int main() { int j; int Length = Heap_Size; HeapSort(A); for ( j=0 ;j<=Length;j++) { printf("%d\n",A[j]); } return 0; } void Max_Heapify(int *A,int i) { int Larger =i; int Left = 2*i+1; int Right =2*i+2; if (Left<=Heap_Size && A[Left]>A[i]) //判断是否小于其孩子的值 { Larger =Left; } if (Right<=Heap_Size && A[Right]>A[Larger]) { Larger = Right; } if (Larger != i) //如果小于,就与其中最大的孩子调换位置 { int temp =A[i]; A[i]=A[Larger]; A[Larger]=temp; Max_Heapify(A,Larger); } } void Build_Max_Heap(int *A) //建立堆 { int i; for( i=(int)(Heap_Size/2);i>=0;i--) { Max_Heapify(A,i); } } void HeapSort(int * A) { Build_Max_Heap(A); while(Heap_Size>=0) //逐个输出 { int temp=A[Heap_Size]; A[Heap_Size]=A[0]; A[0]=temp; Heap_Size--; Max_Heapify(A,0); } }
相关文章推荐
- “《算法导论》之‘排序’”:堆排序
- 算法导论第六章:堆排序
- 算法导论第六章总结:堆排序
- 算法导论第六章 堆排序C++源码(附图)
- 算法导论学习笔记(一)排序算法之堆排序
- 算法导论 之 堆排序[C语言]
- 算法导论_第六章_堆排序
- 算法导论第六章 堆排序
- 算法导论习题--第六章[堆排序]
- 算法导论学习之——堆排序
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 《算法导论》 - 第6章 - 堆排序 - 习题解答
- 算法导论 堆排序
- 《算法导论》的堆排序
- 算法导论Java实现-堆排序(6.4章节)
- 算法导论笔记,堆排序
- 算法导论之堆排序
- 《算法导论》第六章 堆排序 笔记
- 算法导论 第六章 堆排序
- 算法导论学习笔记之四--堆排序