- 6
- 0
- 约4.92千字
- 约 38页
- 2019-08-24 发布于安徽
- 举报
5、基数排序 5、基数排序 对于一般的基数r,相应的分解式为: x%r;(x%r2)/r;(x%r3)/r2;... 当使用基数r=n对n个介于0~nc-1范围内的整数进行分解时,每个数将可以分解出c个数字。 因此,可以采用c次箱子排序,每次排序时取range=n。整个排序所需要的时间为Θ(cn)= Θ(n)(因为c是一个常量)。 6、堆排序 先将要排序的n 个元素初始化为一个最大堆,然后每次从堆中提取(即删除)元素。各元素将按递减次序排列。 初始化所需要的时间为(n),每次删除所需要的时间为O(logn) ,因此总时间为O(nlogn) 。 6、堆排序 template class T void HeapSort(T a[], int n) {// 利用堆排序算法对a[1:n] 进行排序 // 创建一个最大堆 MaxHeapT H(1); H.Initialize(a,n,n) ; // 从最大堆中逐个抽取元素 T x; for (int i = n-1; i = 1; i--) { H.DeleteMax(x) ; a[i+1] = x; } // 在堆的析构函数中保存数组a H.Deactivate(x) ; } 6、堆排序 堆排序的初始化策略: 从第一个具有孩子的节点开始,这个元素在数组中的位置为i=[n/2],如果以这个元素为根的子树
原创力文档

文档评论(0)