堆排(演示过程)
2012-09-15 10:36
127 查看
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 105;
int a
;
void Heapify(int a[], int i, int size) { /* 大根堆化 使以 i 为根的子树成为最大堆 */
int ls = 2*i, rs = 2*i+1;
int large;
if(ls <= size && a[ls] > a[i]) {
large = ls;
}
else large = i;
if(rs <= size && a[rs] > a[large]) {
large = rs;
}
if(large != i) {
swap(a[large], a[i]);
Heapify(a, large, size);
}
}
void Build_Heap(int a[], int size) { // 建立堆树
for(int i = size/2; i >= 1; i--) {
Heapify(a, i, size);
}
for(int i = 1; i <= size; i++){
printf("%d ", a[i]);
}
printf("\n");
}
void Heap_sort(int a[], int size) {
Build_Heap(a, size);
int len = size;
for(int i = len; i >= 2; i--) {
cout << "首尾未交换时:\n";
for(int j = 1; j <= size; j++){
printf("%d ", a[j]);
}
cout << endl;
swap(a[i], a[1]);
cout << "首尾一次交换结束:\n";
for(int j = 1; j <= size; j++){
printf("%d ", a[j]);
}
cout << endl;
len--;
Heapify(a, 1, len);
}
}
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
Heap_sort(a, n);
cout << endl;
return 0;
}
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 105;
int a
;
void Heapify(int a[], int i, int size) { /* 大根堆化 使以 i 为根的子树成为最大堆 */
int ls = 2*i, rs = 2*i+1;
int large;
if(ls <= size && a[ls] > a[i]) {
large = ls;
}
else large = i;
if(rs <= size && a[rs] > a[large]) {
large = rs;
}
if(large != i) {
swap(a[large], a[i]);
Heapify(a, large, size);
}
}
void Build_Heap(int a[], int size) { // 建立堆树
for(int i = size/2; i >= 1; i--) {
Heapify(a, i, size);
}
for(int i = 1; i <= size; i++){
printf("%d ", a[i]);
}
printf("\n");
}
void Heap_sort(int a[], int size) {
Build_Heap(a, size);
int len = size;
for(int i = len; i >= 2; i--) {
cout << "首尾未交换时:\n";
for(int j = 1; j <= size; j++){
printf("%d ", a[j]);
}
cout << endl;
swap(a[i], a[1]);
cout << "首尾一次交换结束:\n";
for(int j = 1; j <= size; j++){
printf("%d ", a[j]);
}
cout << endl;
len--;
Heapify(a, 1, len);
}
}
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
Heap_sort(a, n);
cout << endl;
return 0;
}
相关文章推荐
- 演示My97 DatePicker过程中的错误
- 演示过程可能遇到的问题和应急预案
- 千万数量级分页存储过程(效果演示)
- XSS跨站脚本攻击过程最简单演示
- 客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示
- 在存储过程中演示使用case的例子(一)
- 【Linux】GDB调试演示过程
- Android中Fragment子类及其PreferenceFragment的创建过程演示
- 逻辑卷管理LVM2及演示过程(详细版)
- XSS跨站脚本攻击过程最简单演示
- 演示账号激活的过程:注册——>向指定邮箱发送邮件——>用户登录邮箱,激活账号
- 存储过程及其实例演示
- 一个字符串分割处理的过程演示
- 一步一步演示神经网络回馈算法过程
- 演示VB.NET类定义全过程
- 在存储过程中演示使用case的例子(二)
- 排序算法演示全过程网站
- [置顶] Android开发中App演示Gif效果动画的制作过程详讲
- 五幅图演示ASP.NET编译过程
- 小学数学课件制作实例:演示半球形成过程