您的位置:首页 > 编程语言 > C语言/C++

堆排序示例:对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;
}

该堆排序通过不断的在数组前面部分建立最大堆,并将最大元素输出到末端,从而实现了升序排序.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  堆排序 算法 heap c++
相关文章推荐