选择排序之堆排序

迷南。 2022-07-13 03:53 305阅读 0赞
  1. //选择排序之堆排序
  2. //这里排序数组要从下标1开始
  3. #include <iostream>
  4. using namespace std;
  5. void sift(int R[],int low,int hight)
  6. {
  7. int i=low,j=2*i;
  8. int tmp=R[i];
  9. while(j<=hight)
  10. {
  11. if(R[j]<R[j+1]) j++;
  12. if(R[j]>tmp)
  13. {
  14. R[i]=R[j];
  15. i=j;
  16. j=2*i;
  17. }
  18. else break;
  19. }
  20. R[i]=tmp;
  21. }
  22. void heapsort(int R[],int n)
  23. {
  24. int i;
  25. int tmp;
  26. for(i=n/2;i>=1;i--)//循环建立初始堆
  27. {
  28. sift(R,i,n);
  29. }
  30. for(i=n;i>=2;i--)//循环n-1次,完成最大元素归位
  31. {
  32. tmp=R[1];
  33. R[1]=R[i];
  34. R[i]=tmp;
  35. sift(R,1,i-1);
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,305人围观)

还没有评论,来说两句吧...

相关阅读