堆排序示例:对n个整数进行排序.
2015-03-07 22:01
169 查看
堆排序是一种比较高效的算法.虽然在大规模排序时不及快排,但是这个算法较容易实现,不易错(因为没有用到递归),一般规模的排序还是效果不错的.
以下是示例代码:
#include<iostream>
using namespace std;
void heapsort(int num[], int n); //func decl.
int main(void)
{
int n, *num; //define var.
while(cin >> n) {
num = new int
; //new spaces.
/*input data.*/
for(int i = 0; i < n; ++i)
cin >> num[i];
/*sorting.*/
heapsort(num, n);
/*output data.*/
for(int i = 0; i < n; ++i)
cout << ' ' << num[i];
cout << endl;
delete[] num; //delete spaces.
}
return 0;
}//main.
void HeapAdjust(int num[], int n)
{
int m = n/2; //num of nodes that have child nodes.
for(int i = m; i >= 1; --i)
{
if(2*i < n && num[i-1] < num[2*i]) {
int t = num[i-1];
num[i-1] = num[2*i];
num[2*i] = t;
}
if(num[i-1] < num[2*i-1]) {
int t = num[i-1];
num[i-1] = num[2*i-1];
num[2*i-1] = t;
}
}
return;
}
void heapsort(int num[], int n)
{
for(int i = n; i > 0; --i) {
//build a heap bottom-up
//ensuring the root is the biggest one.
HeapAdjust(num, i);
int t = num[0];
num[0] = num[i-1];
num[i-1] = t;
}
return;
}
该堆排序通过不断的在数组前面部分建立最大堆,并将最大元素输出到末端,从而实现了升序排序.
以下是示例代码:
#include<iostream>
using namespace std;
void heapsort(int num[], int n); //func decl.
int main(void)
{
int n, *num; //define var.
while(cin >> n) {
num = new int
; //new spaces.
/*input data.*/
for(int i = 0; i < n; ++i)
cin >> num[i];
/*sorting.*/
heapsort(num, n);
/*output data.*/
for(int i = 0; i < n; ++i)
cout << ' ' << num[i];
cout << endl;
delete[] num; //delete spaces.
}
return 0;
}//main.
void HeapAdjust(int num[], int n)
{
int m = n/2; //num of nodes that have child nodes.
for(int i = m; i >= 1; --i)
{
if(2*i < n && num[i-1] < num[2*i]) {
int t = num[i-1];
num[i-1] = num[2*i];
num[2*i] = t;
}
if(num[i-1] < num[2*i-1]) {
int t = num[i-1];
num[i-1] = num[2*i-1];
num[2*i-1] = t;
}
}
return;
}
void heapsort(int num[], int n)
{
for(int i = n; i > 0; --i) {
//build a heap bottom-up
//ensuring the root is the biggest one.
HeapAdjust(num, i);
int t = num[0];
num[0] = num[i-1];
num[i-1] = t;
}
return;
}
该堆排序通过不断的在数组前面部分建立最大堆,并将最大元素输出到末端,从而实现了升序排序.
相关文章推荐
- 随机产生N个整数,并对其进行排序,查找……
- 通过指针变量用选择法对数组中的10个整数按从大到小进行排序
- 05_ 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历
- Python中对元组和列表按条件进行排序的方法示例
- Python中对元组和列表按条件进行排序的方法示例
- 对这100万个整数进行排序(每个数是1--100间)
- 混合使用ForkJoin+Actor+Future实现一千万个不重复整数的排序(Scala示例)
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- java编程之对10个整数进行排序(从对话窗体输入数据)
- (p112)在O(n)时间内,对0到n^3-1区间内的n个整数进行排序
- lucene利用sort对查询结果进行排序示例
- 关于整数大小排序的经典java示例
- 对N个整数进行排序(各类排序)
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 对32位无符号整数进行排序
- 写一函数用冒泡法对10个整数进行排序
- 输入任意几个整数,将其进行排序问题。
- 输入n个整数,并且进行降序排序
- 链式基数排序_对整数序列进行排序,低关键字优先的基数排序算法很有创新。
- 产生10个1-100的随机整数, * 把其中的奇数按照从小到大的顺序进行排序, * 并按照“1,2,3,、、、”这样的格式打印到d盘下的number.txt文档中。