堆排序的实现(递归)
2012-11-07 13:05
169 查看
代码:
#include<stdio.h>
int ar[120],n;
void init(){
int i;
for(i=1;i<=n;i++)
scanf("%d",&ar[i]);
}
void output(){
int i;
for(i=1;i<=n;i++)
printf("%d ",ar[i]);
printf("\n");
}
void Dfs(int x){//建堆
int t;
if(2*x<=n){
Dfs(2*x);
}
if(2*x+1<=n){
Dfs(2*x+1);
}
if(2*x<=n)
if(ar[x]<ar[2*x]){t=ar[x];ar[x]=ar[2*x];ar[2*x]=t;}
if(2*x+1<=n)
if(ar[x]<ar[2*x+1]){t=ar[x];ar[x]=ar[2*x+1];ar[2*x+1]=t;}
}
void make(){
int i;
for(i=1;i<=n;i++)
Dfs(i);
}
int main(){
while(scanf("%d",&n)!=EOF){
init();
make();
output();
}
return 0;
}
#include<stdio.h>
int ar[120],n;
void init(){
int i;
for(i=1;i<=n;i++)
scanf("%d",&ar[i]);
}
void output(){
int i;
for(i=1;i<=n;i++)
printf("%d ",ar[i]);
printf("\n");
}
void Dfs(int x){//建堆
int t;
if(2*x<=n){
Dfs(2*x);
}
if(2*x+1<=n){
Dfs(2*x+1);
}
if(2*x<=n)
if(ar[x]<ar[2*x]){t=ar[x];ar[x]=ar[2*x];ar[2*x]=t;}
if(2*x+1<=n)
if(ar[x]<ar[2*x+1]){t=ar[x];ar[x]=ar[2*x+1];ar[2*x+1]=t;}
}
void make(){
int i;
for(i=1;i<=n;i++)
Dfs(i);
}
int main(){
while(scanf("%d",&n)!=EOF){
init();
make();
output();
}
return 0;
}
相关文章推荐
- 堆排序的非递归实现
- 堆与堆排序--递归与非递归java实现
- 算法导论:堆排序递归实现 (c语言)
- java递归实现堆排序
- 堆排序-c++实现,节点变动则递归子树调整状态
- 非递归实现堆排序
- 非递归方法的堆排序实现
- 大顶堆第二弹----堆排序(递归实现)
- 快速排序、冒泡排序、堆排序、shell排序的递归和非递归实现
- 大顶堆第二弹----堆排序(递归实现)
- 非递归方法的堆排序实现
- 堆排序的递归和非递归实现(C++版)
- C++全排列递归实现
- 合并两个有序列表的循环和递归实现
- JAVA递归实现全排列
- 百度笔试题---一个简单的递归实现
- 前序 中序 后序 遍历 递归 非递归算法 java实现
- java 实现堆排序
- 全排列问题算法分析与实现(递归、非递归)
- Perl实现逆波兰式与递归计算