[算法]堆排序
2015-12-23 21:19
260 查看
/* Name:堆排序 Actor:HT Time:2015年12月23日 Error Reporte: 1.每次调整的时候,注意size变量! */ #include <iostream> #include <stdio.h> #include <conio.h> #include <string.h> #include <vector> #include <algorithm> #define N 200 int a ; int sum = 10; void heapadjust(int adjust,int size) //堆排调整 { int largest = adjust; int temp; if (2 * adjust <= size && a[largest] < a[2 * adjust]) //左看 { largest = 2 * adjust; } if (2 * adjust + 1 <= size && a[largest] < a[2 * adjust + 1]) //右看 { largest = 2 * adjust + 1; } if (largest != adjust) //调整 { temp = a[adjust]; a[adjust] = a[largest]; a[largest] = temp; if(largest*2 <= size) heapadjust(largest,size); } for(int i=1;i<=size;i++) { printf(":%d ",a[i]); } printf("\n"); } void heapsort() //堆排序 { int i, j; int temp; for (i = sum / 2; i > 0; i--) //从下向上建堆 { heapadjust(i,sum); } for(i=1;i<=sum;i++) { printf("lll:%d ",a[i]); } printf("\n"); for (i = sum; i > 1; i--) //依次放到最后的位置 { temp = a[i]; a[i] = a[1]; a[1] = temp; heapadjust(1,i-1); //调整该点 } } int main() { int i,j; for(i=1;i<=sum;i++) { scanf("%d",&a[i]); } heapsort(); for(i=1;i<=sum;i++) { printf("%d ",a[i]); } }
相关文章推荐
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- VIM配置+ACM现场赛配置
- ajax知识应用点
- Iterator的用法
- 基于http在互联网传输敏感数据的消息摘要、签名与加密方案
- 总结java反射相关知识
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- HDU 3065 病毒侵袭持续中 AC自动机
- windows 下配置tomcat
- NTP方式保证以时间戳同步可靠性
- IP Phone的原理是什么?
- Unity3D-rigidBody.velocity
- 如何去设计一个自适应的网页设计或HTMl5
- 前端学习【各种网站地址】
- linux的/dev/shm 介绍
- PhoneGapAndroid开发
- COCI2015/2016 CONTEST#4 简易题解
- 第4天
- android-Storage Options
- hdu1272 并查集