heapsort.c
上传用户:bjtelijie
上传日期:2010-01-01
资源大小:87k
文件大小:1k
源码类别:

数学计算

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #define MARK 0
  3. static a[8] = {MARK,25,4,36,1,60,10,58,};
  4. int count = 1;
  5. void heap(int n);
  6. void adjust(int i,int n);
  7. int main(void)
  8. {
  9. int i;
  10. printf("源数据为:");
  11. for(i = 1;i<8;i++)
  12. printf("%5d",a[i]);
  13. heap(7);
  14. printf("n排序后的数据为:");
  15. for(i = 1;i<8;i++)
  16. printf("%5d",a[i]);
  17. printf("n");
  18. return 0;
  19. }
  20. void heap(n)
  21. int n;
  22. {
  23. int i,j,t;
  24. for(i =n/2;i>0;i--)
  25. adjust(i,n);
  26. printf("n初始化成堆===>   ");
  27. for(i = 1;i < 8;i++)
  28. printf("%5d",a[i]);
  29. for(i = n-1;i>0;i--)
  30. {
  31. t = a[i+1];
  32. a[i+1] = a[1];
  33. a[1] = t;
  34. adjust(1,i);
  35. printf("n第%2d步操作结果===>",count++);
  36. for(j = 1;j<8;j++)
  37. printf("%5d",a[j]);
  38. }
  39. }
  40. void adjust(i,n)
  41. int i,n;
  42. {
  43. int j,k,r,done=0;
  44. k = r = a[i];
  45. j = 2*i;
  46. while((j<=n)&&(done==0))
  47. {
  48. if(j<n)
  49. {
  50. if(a[j]<a[j+1])
  51. j++;
  52. }
  53. if(k>=a[j])
  54. done = 1;
  55. else
  56. {
  57. a[j/2] = a[j];
  58. j = 2* j;
  59. }
  60. }
  61. a[j/2] = r;
  62. }