排序算法总结4-堆排序
来源:互联网 发布:mac创建无线网络 编辑:程序博客网 时间:2024/05/14 11:13
堆排序的主要步骤:
1 根据数组,从非叶子结点开始,建立最大(小)堆。
2 交换第一个结点和最后一个结点的数据,此时最后一个结点即为最大(小)值。此时前面n-1个数据重新调整堆。按此循环到结束。
#include<stdio.h>void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}void printout(int a[],int n){ int i; for(i = 0; i < n; i++) { printf("%d ",a[i]); } printf("\n");}void maxheapdown(int a[],int i,int n)//{ int j,temp; temp = a[i]; j = 2*i + 1; while(j < n) { if(j + 1 < n && a[j+1] > a[j]) //先在左右孩子中找最大的结点 j++; if(a[j] > temp) { a[i] = a[j]; i = j; j = 2*i + 1; //a[i] = temp; } if(a[j] <= temp) break; } a[i] = temp;}void buildmaxheap(int a[], int n){ int i; for(i = n/2 -1; i >= 0; i--) { maxheapdown(a,i,n); } printf("build:"); printout(a,n);}void maxheapsort(int a[],int n){ int i; for(i = n-1; i >=0; i--) { swap(&a[0],&a[i]); maxheapdown(a,0,i); } printout(a,n);}int main(){ int data2[5] = {2,4,3,5,6}; buildmaxheap(data2,5);//先创建堆 maxheapsort(data2,5);}
复杂度分析
堆排序的最坏时间复杂度为O(nlogn)。堆序的平均性能较接近于最坏性能。
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1),
它是不稳定的排序方法。
- 排序算法总结4-堆排序
- 算法总结:堆排序
- 堆排序算法总结!
- 堆排序算法 总结
- 堆排序算法总结
- 堆排序算法 总结
- 堆排序算法 总结
- 堆排序算法 总结
- 堆排序算法总结!
- 堆排序算法 总结
- 堆排序算法 总结
- 堆排序算法总结
- 堆排序算法总结
- 【算法总结】堆及堆排序总结
- 【算法总结】堆及堆排序总结
- 排序算法4-堆排序
- 堆排序算法知识点总结
- iOS算法总结-堆排序
- 读写Unicode带中文的txt文件
- html 中文占位符
- RFC2733-FEC for rtp
- 第10次实验任务
- Java虚拟机学习笔记(字节码执行引擎)
- 排序算法总结4-堆排序
- LVM分区
- android面试题集锦1
- Android socket编程
- 如何设置Eclipse中的每一行容纳的代码数 字节数
- 设计模式 - 建造者模式、解释器模式、模板模式
- 图像处理类
- python正则表达式例子
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)