Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38504
  • 博文数量: 64
  • 博客积分: 2640
  • 博客等级: 少校
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 13:15
文章分类
文章存档

2010年(64)

我的朋友
最近访客

分类: C/C++

2010-01-26 14:20:28

#include<fstream>
using namespace std;

void FilterUp(int arr[],int i);
void FilterDown(int arr[],int i,int n);
void Heapsort(int arr[],int n);

int main(void){
    int num[100010],n;
    int i,j;
    ifstream in("test5.in");
    ofstream out("test.out");
    
    in>>n;
    for(i=1;i<=n;i++)
        in>>num[i];
        
    Heapsort(num,n);
    
    for(i=1;i<=n;i++) out<<num[i]<<" ";
    
    system("pause");
    return 0;
}

void FilterUp(int i);
void FilterDown(int i);

void Heapsort(int arr[],int n){
     int i,j,t,step;
     
     //Build Heap

     for(i=2;i<=n;i++) FilterUp(arr,i);
     
     //Sort

     step = n;
     for(i=1;i<step;i++){
         t = arr[1];
         arr[1] = arr[n];
         arr[n] = t;
         n--;
         
         FilterDown(arr,1,n);
     }
}

void FilterUp(int arr[],int i){
     int temp;
     
     temp = arr[i];
     while(i>1){
          if(arr[i/2]>=temp) break;
          arr[i] = arr[i/2];
          i /= 2;
     }
     arr[i] = temp;
}

void FilterDown(int arr[],int i,int n){
     int temp,j;
     
     temp = arr[i];
     j = i+i;
     
     while(j<=n){
          if(j<n&&arr[j]<arr[j+1]) j++;
          if(temp>=arr[j]) break;
          arr[i] = arr[j];
          i = j;
          j = i+i;
     }
     arr[i] = temp;
}
     


阅读(327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~