九度OJ 1202 排序 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1202
- 题目描述:
-
对输入的n个数进行排序并输出。
- 输入:
-
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
- 输出:
-
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
- 样例输入:
-
4
1 4 3 2
- 样例输出:
-
1 2 3 4
#include <stdio.h>
#include <stdlib.h> void HeapSort(int Array[], int len);
void BuildMaxHeap(int Array[], int len);
void ShiftDown(int Array[], int index, int len);
void Swap(int *m, int *n); int main(void){
int len;
int * Array;
int i; while (scanf("%d", &len) != EOF){ //读入数据个数
Array = (int *)malloc(sizeof(int) * (len+1));
for (i=1; i<=len; ++i) //读入数据
scanf("%d", &Array[i]); BuildMaxHeap(Array, len);
HeapSort(Array, len);
for (i=1; i<=len; ++i)
printf("%d ", Array[i]);
printf("\n");
free(Array);
}
return 0;
} void HeapSort(int Array[], int len){
int i;
int time = len;
for (i=0; i<len; ++i){
Swap(&Array[1], &Array[time]);
--time;
ShiftDown(Array, 1, time);
}
} void BuildMaxHeap(int Array[], int len){
int index = len/2; for (; index>0; --index){
ShiftDown(Array, index, len);
}
}
void ShiftDown(int Array[], int index, int len){
while ((2*index) <= len || (2*index+1) <= len){
if (2*index+1 <= len){
if (Array[index] < Array[2*index] ||
Array[index] < Array[2*index+1]){
if (Array[2*index] > Array[2*index+1]){
Swap(&Array[index], &Array[2*index]);
index = 2*index;
}
else{
Swap(&Array[index], &Array[2*index+1]);
index = 2*index + 1;
}
}
else
break;
}
else{
if (Array[index] < Array[2*index]){
Swap(&Array[index], &Array[2*index]);
index = 2*index;
}
else
break;
}
}
} void Swap(int *m, int *n){ //交换数据
int tmp;
tmp = *m;
*m = *n;
*n = tmp;
}
参考资料:http://blog.csdn.net/v_july_v/article/details/6198644
九度OJ 1202 排序 -- 堆排序的更多相关文章
- 九度OJ 1202:排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:19711 解决:6508 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...
- 【九度OJ】题目1202:排序 解题报告
[九度OJ]题目1202:排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1202 题目描述: 对输入的n个 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
- 【九度OJ】题目1023:EXCEL排序 解题报告
[九度OJ]题目1023:EXCEL排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1023 题目描述: E ...
- 【九度OJ】题目1185:特殊排序 解题报告
[九度OJ]题目1185:特殊排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1185 题目描述: 输入一系 ...
- 【九度OJ】题目1061:成绩排序 解题报告
[九度OJ]题目1061:成绩排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1061 题目描述: 有N个学 ...
- 【九度OJ】题目1190:大整数排序 解题报告
[九度OJ]题目1190:大整数排序 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1190 题目描述: 对N个长度最长可达 ...
- 【九度OJ】题目1196:成绩排序 解题报告
[九度OJ]题目1196:成绩排序 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1196 题目描述: 用一维数组存储学号和成绩,然后 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
随机推荐
- openstack 虚拟机流量
- 分布式定时任务框架比较,spring batch, tbschedule jobserver
分布式定时任务框架比较,spring batch, tbschedule jobserver | 移动开发参考书 分布式定时任务框架比较,spring batch, tbschedule jobser ...
- PHP数组操作汇总
php 操作数组 (合并,拆分,追加,查找,删除等) - Just Code - ITeye技术网站 PHP操作数组的一些函数介绍 -- 简明现代魔法 PHP数组元素操作实例 -- 简明现代魔法 儿童 ...
- A Tour of Go Structs
A struct is a collection of fields. (And a type declaration does what you'd expect.) package main im ...
- js http 请求 多个相同参数名传值
最近在用js和api做对接的时候需要传参数类似于 rights=a1&rights=a2 因为有相同的参数名,试过很多方法都被覆盖了. 最后终于发现可以通过rights=[a1,a2]的方式, ...
- 《机器学习实战》——K近邻算法
三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...
- Oracle的commit详解(转)
java通过jdbc thin方式连接数据库后,对数据库操作时会出现以下两种情况,我这可能记录不全: 1.在sqlplus中查询得到和java终端中输出的查询结果不同 2.执行某些sql语句卡住不动 ...
- Java+7入门经典 -2 数据
第2章 程序,数据,变量和计算 2.1 数据和变量 变量是一段有名字的内存, 存储程序中的信息, 描述事物的数据项; 每段定义了名字的内存只能存储一种特定类型的数据. Type; 编译器会检测错误的类 ...
- nginx安装php和php-fpm
最近在学习nginx,看了好多帖子终于安装成功了. 经验,首先不要用yum安装,安装完以后根本找不到安装目录在哪里呀,然后安装失败以后会很不方便. 最终选择了自己编译安装. 看了好多帖子都不行,终于找 ...
- Dom4j写XML
package com; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.I ...