千家信息网

C语言数据结构与算法排序的方法有哪些

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"C语言数据结构与算法排序的方法有哪些",在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C
千家信息网最后更新 2026年11月04日C语言数据结构与算法排序的方法有哪些

这篇文章主要介绍"C语言数据结构与算法排序的方法有哪些",在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言数据结构与算法排序的方法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、前言

    主要介绍选择类排序中的简单、树形和堆排序,归并排序、分配类排序的基数排序

    二、选择类排序

    选择类:每次从待排序的无序序列中,选择一个最大或最小的数字,放到前面,数据元素为空时排序结束

    1.简单选择排序

    动态演示:

    算法讲解:

    1. 首先通过n-1次比较,从n个记录中找出最小值,将它与第一个元素交换

    2. 再通过n-2次比较,从剩余的n-1个记录中找出次小的值,将它与第二个记录交换

    3. 重复上述操作n-1,排序完成

    代码:

    void SelectSort(RecordType r[], int length)/*对记录数组r做简单选择排序,length为数组的长度*/{        int i,j,k; int n;     RecordType x;    n=length;        for ( i=1 ; i<= n-1; ++i)          {                k=i;                for (j=i+1 ; j<= n ; ++j)                         if (r[j].key < r[k].key ) k=j;                if ( k!=i)                  {                      x= r[i];   r[i]= r[k];   r[k]=x;                }        }       } /* SelectSort  */

    特点:

    不稳定排序

    时间复杂度O(n*n), 空间复杂度O(1)

    2.树形选择排序

    静态演示:

    算法讲解:

    1. 最下面一行21 25 49 25 16 08 63是给定需要从小到大排序的数字

    2. 相邻的两个选出一个最小的向上移一层,只有一个的补一个值无穷大的数

    3. 倒数第二层再次两两组合,直到最顶端

    4. 此时,最顶端08就是值最小的数,输出08,把所有08至为无穷大

    5. 再次选出一个最小值,以此类推

    特点:

    算法不作要求

    稳定排序, 增加额外的存储空间

    时间复杂度O(nlogn),空间复杂度O(n-1)

    3.堆选择排序

    动态演示:

    算法讲解:

    1. 根结点值最大的叫大顶堆,根结点值最小的叫小顶堆,上图就是一个构造大顶堆的图

    2. 从最后一层开始,如果孩子结点的值比父亲结点大,那么就交换位置

    3. 一层层向上推,直到根结点值最大

    建立初始堆:

    void crt_heap(RecordType r[], int length )/*对记录数组r建堆,length为数组的长度*/{        int i,n;    n= length;        for ( i=n/2; i >= 1; --i) /* 自第[n/2]个记录开始进行筛选建堆 */                 sift(r,i,n);}

    调整堆:

    void  sift(RecordType  r[],  int k, int m)/* 假设r[k..m]是以r[k]为根的完全二叉树,且分别以r[2k]和r[2k+1]为根的左、右子树为大根堆,调整r[k],使整个序列r[k..m]满足堆的性质 */{       RecordType t;      int i,j;   int x;     int finished;        t= r[k];          /* 暂存"根"记录r[k] */          x=r[k].key;       i=k;    j=2*i;        finished=FALSE;        while( j<=m && !finished  )                 {                          if (j= r[j].key)      finished=TRUE;            /*  筛选完毕  */                      else                      {   r[i] = r[j];  i=j;  j=2*i;       }    /* 继续筛选 */                 }                r[i] =t;          /* r[k]填入到恰当的位置 */ }

    堆排序:

    void  HeapSort(RecordType  r[],int length)/* 对r[1..n]进行堆排序,执行本算法后,r中记录按关键字由大到小有序排列 */ {        int i,n;   RecordType b;        crt_heap(r, length);       n= length;        for (  i=n ; i>= 2; --i)         {                b=r[1];     /* 将堆顶记录和堆中的最后一个记录互换 */                 r[1]= r[i];                r[i]=b;                 sift(r,1,i-1);  /* 进行调整,使r[1..i-1]变成堆 */         }} /* HeapSort */

    特点:

    堆选择是树形的改进,空间占用较小

    不稳定排序,适合n值较大的排序

    时间复杂度O(n*logn),空间复杂度O(1)

    三、归并排序

    法一:

    将整体数字一分为二,逐层细分

    细分完成后,每一块进行排序,直到整体有序

    法二:

    将一串序列,相邻的两个归并到一起排序,再次把相邻两个有序的归并块再次排序,直到最后有序(优先推荐这种算法)

    代码:

    void MergeSort ( RecordType  r[], int n) /* 对记录数组r[1..n]做归并排序 */ {        MSort ( r, 1, n, r);}void   MSort(RecordType  r1[],  int  low,  int  high,  RecordType  r3[])/* r1[low..high]经过排序后放在r3[low..high]中,r2[low..high]为辅助空间 */ {        int mid;   RecordType  r2[20];        if (low==high)   r3[low]=r1[low];        else        {                mid=(low+high)/2;        MSort(r1,low, mid, r2);        MSort(r1,mid+1,high, r2);        Merge (r2,low,mid,high, r3);     }} /*   MSort  */

    特点:

    稳定排序

    时间复杂度O(nlogn),空间复杂度O(n)

    附加空间比较大,很少用于内部排序,主要是外部排序

    四、分配类排序

    1.多关键字排序

    高位优先:按照花色大小分成四类,在每一类中按照面值进行排序

    低位优先:按照面值大小分成13类,将相同面值的不同花色进行排序

    2.链式基数排序

    算法讲解:

    1. 对于上面的9个三位数,第一步我们按照个位数从小到大排序

    2. 接着第一步的结果,按照十位数从小到达排序

    3. 最后借助第二步的结果,按照百位数从小到大排序

    4. 同样的,对于4位 5 位方法一样

    特点:

    时间复杂度O(d*n),d是关键字数,n是记录数

    稳定的排序

    空间复杂度=2个队列指针+n个指针域

    到此,关于"C语言数据结构与算法排序的方法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

    排序 算法 复杂 复杂度 空间 选择 方法 最小 数据 数组 时间 特点 结点 数据结构 结构 语言 有序 从小 再次 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 互联网科技开发公司 未来的互联网科技 云电互联网科技 互联网科技ppt模板 广州凡科互联网科技 互联网高科技股票 互联网科技有限公司 翻译 深圳卡尔迅互联网科技有限公司怎么样 衡水科技产业互联网平台 须眉科技是互联网公司吗 互联网系的金融科技公司 速维有品互联网信息科技(苏州)有限公司 佛山市拉法互联网科技有限公司 玉溪新华互联网科技好不好 信承诺互联网科技有限公司 互联网界的黑科技 科技互联网企业在行动 知域互联网科技有限公司官网 中国主要互联网科技公司 互联网金融 金融科技 奇酷互联网科技公司 互联网科技视频素材 互联网科技博主是什么意思 成都互联网科技公司100强 互联网科技有哪些公司 上海宁丞科技互联网 内蒙古九一互联网科技 互联网时代科技型公司的机会 科技互联网企业在行动
    0