堆排序的C语言实现
2013-08-12 15:28
295 查看
//堆排序,初始化堆,然后不断进行堆的调整
//大顶堆,每次取最大的
#include<iostream>
using namespace std;
void HeapAdjust(int a[], int s,int m)
{
int i, j, tmp;
tmp = a[s];
for(j=2*s;j<=m;j*=2){
if(j<m&&a[j]<a[j+1])++j;
if(tmp>=a[j]) break;
a[s]=a[j];s=j;
}
a[s] = tmp;
}
void HeapSort(int a[], int n)
{
int i,t;
for(i=n/2;i>0;i--)
HeapAdjust(a,i,n);//initialize the heap
for(i=n;i>1;i--)
{
t = a[i];
a[i] = a[1];
a[1] = t;
HeapAdjust(a,1,i-1);//每次从第1个调整到未排好序的一个
}
}
int main()
{
int i, a[20],n=10;
for(i=1;i<=n;i++)
cin>>a[i];
HeapSort(a,n);
for(i=1;i<=n;i++)
cout<<a[i];
return 0;
}
//大顶堆,每次取最大的
#include<iostream>
using namespace std;
void HeapAdjust(int a[], int s,int m)
{
int i, j, tmp;
tmp = a[s];
for(j=2*s;j<=m;j*=2){
if(j<m&&a[j]<a[j+1])++j;
if(tmp>=a[j]) break;
a[s]=a[j];s=j;
}
a[s] = tmp;
}
void HeapSort(int a[], int n)
{
int i,t;
for(i=n/2;i>0;i--)
HeapAdjust(a,i,n);//initialize the heap
for(i=n;i>1;i--)
{
t = a[i];
a[i] = a[1];
a[1] = t;
HeapAdjust(a,1,i-1);//每次从第1个调整到未排好序的一个
}
}
int main()
{
int i, a[20],n=10;
for(i=1;i<=n;i++)
cin>>a[i];
HeapSort(a,n);
for(i=1;i<=n;i++)
cout<<a[i];
return 0;
}
相关文章推荐
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- [算法练习]堆排序的C语言实现
- 堆排序(C语言实现)
- 算法导论 堆排序 C语言实现
- 读《算法导论》我来C语言实现(3)——堆排序和优先级队列
- 常见排序算法的C语言实现之堆排序
- [数据结构]堆排序的C语言简单实现
- 堆排序及其c语言实现
- 堆排序的C语言实现
- 堆排序原理及c语言实现
- 堆排序的实现-C语言
- 堆排序的c语言实现
- C语言实现堆排序
- 堆排序(C语言实现)
- 【算法】C语言实现堆排序
- [原创]堆排序 C语言实现
- 排序【1】之堆排序的C语言实现
- 堆排序及C语言实现
- 算法导论:堆排序递归实现 (c语言)
- 三种排序算法的C语言实现--直接插入、希尔、堆排序