算法导论第六章 堆排序
2014-05-13 00:03
211 查看
建堆的时间复杂度是O(n),堆排序的时间复杂度是O(NLogN),具体算法如下所示:
<span style="font-size:18px;">#include <iostream> using namespace std; void swap(int &i,int &j) { int temp=i; i=j; j=temp; } void shiftDown(int *A, int start,int len) { int temp=A[start]; int i=start; int j=2*i+1; while (j<len) { if (j+1<len && A[j+1]>A[j]) { j++; } if(A[start]>A[j]) { break; }else { A[i]=A[j]; i=j; j=2*j+1; } } A[i]=temp; } void createHeap(int *A,int len) { for(int i=(len-2)/2;i>=0;i--) { shiftDown(A, i,len); } } void heapSort(int *A,int len) { createHeap(A,len); for (int i=0; i<len; i++) { swap(A[0],A[len-i-1]); shiftDown(A,0,len-i-1); } } int main(int argc, const char * argv[]) { //int A[]={100,11,43,65}; //int A[]={56,3,5,68,100,32}; int A[]={68,100,32}; heapSort(A,sizeof(A)/sizeof(int)); for(int i=0;i<sizeof(A)/sizeof(int);i++) { cout<<A[i]<<" "; } cout <<endl; return 0; } </span>
相关文章推荐
- 算法导论第六章-堆排序
- 学习《算法导论》第六章 堆排序 总结
- 算法导论第六章 堆排序
- 《算法导论》第六章----堆排序
- 算法导论-第六章-堆排序:基于最大堆的排序C++实现
- 算法导论 第六章 堆排序
- 算法导论第六章 -- 堆排序
- 算法导论第六章总结:堆排序
- 学习《算法导论》第六章 堆排序 总结二
- 算法导论笔记-第六章-堆排序
- 算法导论 第六章:堆排序
- 算法导论第六章 堆排序C++源码(附图)
- 《算法导论》第六章 堆排序 笔记
- 《算法导论》第六章“堆排序”习题解答
- 算法导论_第六章_堆排序
- 算法导论(第三版)第六章 堆排序的全部实现(堆排序,优先队列)
- 算法导论第六章 堆排序C++源码(附图)
- 算法导论 第六章 堆排序
- 算法导论 第六章 堆排序
- 算法导论第六章 堆排序