千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"C语言数据结构与算法排序的方法有哪些",在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 科技互联网项目 互联网核心科技是什么 平安科技 互联网 有马互联网科技 世界互联网领先科技成果 九亚互联网科技 互联网金融科技创新 狮子座互联网科技培训 互联网之后的科技是什么 互联网系的金融科技公司 深圳市优智互联网科技有限公司 广西互联网科技孵化中心 广州新华互联网科技学校电竞方面 互联网科技的全部知识 黑科技 体验场景 互联网大会 西安有哪些互联网高科技企业 珠海东科互联网科技有限公司 北京互联网科技类企业分布 米泉互联网科技专业怎么样 互联网科技博主张洲 南京欣网互联网络科技 百单网互联网科技有限公司怎么样 华脉科技工业互联网产品 互联网教育科技公司vipkid 中国科技创新与世界互联网大会 本届互联网大会上的黑科技 互联网科技手机排行榜 中国互联网公司的科技投入 数字科技和互联网金融哪个好 现代科技的标志之一的互联网
    0