• 排序算法-堆积树排序法(HeapSort)


    目录

    排序算法-堆积树排序法(HeapSort)

    1、说明

    2、算法分析

    3、C++代码 


    排序算法-堆积树排序法(HeapSort)

    1、说明

    堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序时间。堆积排序法用到了二叉树的技巧,是利用堆积树来完成排序的。堆积树是一种特殊的二叉树,可分为最大堆积树和最小堆积树两种。

    最大堆积树满足以下3个条件:

    1. 它是一棵完全二叉树。
    2. 所有节点的值都大于或等于它左右子节点的值。
    3. 树根是堆积树中最大的。

    最小堆积树具备以下3个条件:

    1. 它是一棵完全二叉树。
    2. 所有节点的值都小于或等于它左右子节点的值。
    3. 树根是堆积树中最小的。

    2、算法分析

    1. 在所有情况下,时间复杂度均为O(nlog_{2}n)
    2. 堆积排序法不是稳定排序法。
    3. 只需要一个额外的空间,空间复杂度为O(1)

    3、C++代码 

    1. #include
    2. #include
    3. using namespace std;
    4. void Print(int* data, int size) {
    5. for (int i = 1; i < size; i++)
    6. cout << "[" << setw(2) << data[i] << "] ";
    7. cout << endl;
    8. }
    9. void Swap(int& i, int& j) {
    10. int temp = i;
    11. i = j;
    12. j = temp;
    13. }
    14. void ad_heap(int* data, int i, int size) {
    15. int j = 2 * i;
    16. int temp = data[i];
    17. int post = 0;
    18. while (j <= size && post == 0){
    19. if (j < size) {
    20. if (data[j] < data[j + 1])
    21. j++;
    22. }
    23. if (temp >= data[j])
    24. post = 1;
    25. else {
    26. data[j / 2] = data[j];
    27. j *= 2;
    28. }
    29. }
    30. data[j / 2] = temp;
    31. }
    32. void Heap(int* data, int size) {
    33. for (int i = (size / 2); i > 0; i--)
    34. ad_heap(data, i, size - 1);
    35. for (int i = size - 2; i > 0; i--) {
    36. Swap(data[1], data[i + 1]);
    37. ad_heap(data, 1, i);
    38. }
    39. }
    40. int main() {
    41. int data[9] = { 0,5,6,4,8,3,2,7,1 };
    42. int size = 9;
    43. cout << "原始数据:";
    44. Print(data, size);
    45. Heap(data, size);
    46. cout << "排序结果:";
    47. Print(data, size);
    48. return 0;
    49. }

    输出结果 

  • 相关阅读:
    基于Java+控制台实现教材管理系统
    【43. 数位统计DP(计数问题)】
    【Django】聚合查询
    iOS 组件化-发布组件到远程仓库
    9.基于netty实现WebSocket服务器
    ARM PWN
    with语句和上下文管理器
    flask项目-1-flask安装
    每日三题 6.28
    QX5241高端检测降压恒流LED驱动器 泉芯电子
  • 原文地址:https://blog.csdn.net/qq_40660998/article/details/133850215