• c语言数据结构之 堆排序


    算法:先生成随机数,赋值到数组,将数组第一个元素a[0]设置为哨兵,函数调用数组和随机数个数n,再设定n/2的根结点与孩子结点进行比较操作,若右孩子存在,则选出三个数里最小的数赋值给根节点,如果右孩子不存在,则只需比较左孩子与根节点大小,一直循环操作至a[1],再从a[2]开始进行根结点与孩子结点进行比较操作,一直到n/2为止,最后,依次输出a[1],输出后将a[n]赋值给a[1];再进行递归操作,重复以上步骤,直至数组为空

    要点:画出二叉树是方便理解,并非数据的结构就是如同二叉树那般存储,存储形式还是一排

    编译器:VS2013

    代码

     1 #include "stdafx.h"
     2 #include<stdlib.h>
     3 
     4 //函数声明
     5 void HeapSort(int a[], int n); //堆排序(从小到大)
     6 void HSort(int a[], int n);    //辅助堆排序
     7 void Change(int &a, int &b);    //值互换
     8 
     9 int main()
    10  {
    11     int i, n, a[100];
    12 
    13     printf("请输入需要排序元素的个数:");
    14     scanf_s("%d", &n);
    15 
    16     printf("随机生成的数组为:");
    17     for (i = 1; i <= n; i++)
    18     {
    19         a[i] = rand() % 100 + 1;
    20         printf("%d ", a[i]);
    21     }
    22 
    23     a[i] = '';
    24 
    25     printf("
    ");
    26     HeapSort(a, n);
    27  }
    28 
    29 //堆排序(从小到大)
    30 void HeapSort(int a[], int n)
    31 {
    32     printf("
    堆排序后的结果(从小到大):");
    33 
    34     while (n)
    35     {
    36         HSort(a, n);
    37 
    38         printf("%d ", a[1]);
    39         a[1] = a[n];
    40 
    41         n--;
    42     }
    43 
    44     printf("
    
    ");
    45 }
    46 
    47 
    48 
    49 //辅助堆排序(从小到大)
    50 
    51 void HSort(int a[], int n)
    52 {
    53     int i = n / 2, k;
    54 
    55     while (i)
    56     {
    57         k = 2 * i;
    58 
    59         if (k<n&&a[k] >a[k + 1])
    60             k++;
    61 
    62         if (a[i] > a[k])
    63             Change(a[i], a[k]);
    64 
    65         i--;
    66     }
    67 
    68     for (i = 2; i <= n / 2; i++)
    69     {
    70         k = 2 * i;
    71 
    72         if (k<n&&a[k] > a[k + 1])
    73             k++;
    74 
    75         if (a[i] > a[k])
    76             Change(a[i], a[k]);
    77 
    78     }
    79 
    80 }
    81 
    82 
    83 
    84 //值互换
    85 void Change(int &a, int &b)
    86 {
    87     int t;
    88 
    89     t = a;
    90     a = b;
    91     b = t;
    92 }

    结果

  • 相关阅读:
    学习笔记 四边形不等式的模型
    题解 AT2230【Water Distribution】
    题解 CF848C 【Goodbye Souvenir】
    第二届全国大学生算法设计与编程挑战赛(春季赛)正式赛题解&比赛回顾
    积性函数相关学习笔记
    【MySQL】数据库备份
    【SpringMVC】SSM的maven依赖
    【SpringMVC】Jackson解决乱码问题配置
    【SpringMVC】DispatcherServlet与中文过滤器配置
    【Spring】学习笔记008--AOP实现方式
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/6209647.html
Copyright © 2020-2023  润新知