六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 26|回复: 0

排序------堆排序

[复制链接]

升级  12.67%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
69
 楼主| 发表于 2013-1-26 12:36:10 | 显示全部楼层 |阅读模式
先把代码贴上来先,网友们如果发现有啥错误,直说哈。至于原理,会跟另一个版本的一起贴上来。/*-------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;     }  
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表