排序------堆排序

先把代码贴上来先,网友们如果发现有啥错误,直说哈。至于原理,会跟另一个版本的一起贴上来。
/*-------exchange---------- 
函数名 :exchange;
功能   : 进行两个的交换;
参数   : 进行比较的两个数的指针;
返回值 : 为空; 
 -------------------------*/
void exchange(int *a, int *b)   
{   
    int t;   
    t = *a;   
    *a = *b;   
    *b = t;   
}   
  
/*-------part_sort---------- 
函数名 :part_sort;
功能   : 对无序区进行一次堆排序---相当于建堆;
参数   : 无序区的长度int n, 待排序的数组int *a;
返回值 : 为空; 
-------------------------*/    
int part_sort(int n, int *a)  //进行一次堆排序   
{   
    int temp, t, i;   
       
    for( i = n / 2; i >= 1; i--)   
    {   
        temp = 2 * i;   
        if(temp <= (n-1) && a[temp] < a[temp+1])   
        {   
            temp++;   
        }   
  
        if(a[i] < a[temp])   
        {   
            exchange(&a[i], &a[temp]);   
        }   
    }   
}   
/*-------heapsort----------
函数名 :heapsort;
功能   : 堆排序的主体函数,实现排序,进行递归;
参数   : 待排序的数组int *a, 无序区的长度 int n;
返回值 : 整型int ; 
-------------------------*/
int heapsort(int *a, int n)  //  n 并非 数组的总长度, 是无序区的长度;<BR>{   
    int temp;   
  
    if(n == 1)   
    {   
        return 0;   
    }   
  
    part_sort(n, a);  // 对a[1]....a[n].进行一次堆排序;   
  
    exchange(&a[1] , &a[n]);    //将堆顶a[1] 与 无序区的 最后一个元素 也就是a[n]进行交换    
  
    heapsort(a, n-1);//将 a[n] 归入有序区, 无序区变为a[1].......a[n-1].进行递归;   
  
    return 1;   
  
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值