iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构与算法排序的方法有哪些
  • 903
分享到

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

2023-06-22 03:06:58 903人浏览 泡泡鱼
摘要

这篇文章主要介绍“C语言数据结构与算法排序的方法有哪些”,在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据结构与算法排序的方法有哪些”的疑

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

    一、前言

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

    二、选择类排序

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

    1.简单选择排序

    动态演示:

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

    算法讲解:

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

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

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

    代码:

    void SelectSort(RecordType r[], int 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;}}} 

    特点: 

    不稳定排序

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

    2.树形选择排序

    静态演示:

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

    算法讲解:

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

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

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

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

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

    特点: 

    算法不作要求

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

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

    3.堆选择排序

    动态演示:

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

    算法讲解:

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

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

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

    建立初始堆:

    void crt_heap(RecordType r[], int length ){int i,n;    n= length;for ( i=n/2; i >= 1; --i)  sift(r,i,n);}

    调整堆:

    void  sift(RecordType  r[],  int k, int m){RecordType t;int i,j;int x;int finished;t= r[k];                x=r[k].key;i=k;j=2*i;finished=FALSE;while( j<=m && !finished  ) {          if (j<m  && r[j].key< r[j+1].key )  j=j+1;        if ( x>= r[j].key)finished=TRUE;                  else      {   r[i] = r[j];  i=j;  j=2*i;}     }r[i] =t;           }

    堆排序:

    void  HeapSort(RecordType  r[],int length) {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);   }} 

    特点: 

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

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

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

    三、归并排序

    法一:

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

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

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

    法二:

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

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

    代码:

    void MergeSort ( RecordType  r[], int n)  {MSort ( r, 1, n, r);}void   MSort(RecordType  r1[],  int  low,  int  high,  RecordType  r3[]) {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);     }} 

    特点: 

    稳定排序

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

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

    四、分配类排序

    1.多关键字排序

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

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

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

    2.链式基数排序

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

    算法讲解:

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

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

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

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

    特点:

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

    稳定的排序

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

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

    --结束END--

    本文标题: C语言数据结构与算法排序的方法有哪些

    本文链接: https://www.lsjlt.com/news/302138.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C语言数据结构与算法排序的方法有哪些
      这篇文章主要介绍“C语言数据结构与算法排序的方法有哪些”,在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据结构与算法排序的方法有哪些”的疑...
      99+
      2023-06-22
    • C语言数据结构与算法之排序总结(一)
      目录一、前言二、基本概念1.排序2.排序方法的稳定性3.内部和外部排序三、插入类排序1.直接插入排序2.折半插入排序3.希尔排序四、交换类排序1.冒泡排序2.快速排序五、总结比较一、...
      99+
      2022-11-12
    • C语言数据结构与算法之排序总结(二)
      目录一、前言二、选择类排序1.简单选择排序2.树形选择排序3.堆选择排序三、归并排序四、分配类排序1.多关键字排序2.链式基数排序五、总结归纳一、前言 之前的排序总结(一)对插入类和...
      99+
      2022-11-12
    • C语言数据结构与算法中枚举、模拟及排序的方法
      本篇内容主要讲解“C语言数据结构与算法中枚举、模拟及排序的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言数据结构与算法中枚举、模拟及排序的方法”吧!枚举连号区间数来源:第四届蓝桥杯省赛...
      99+
      2023-06-30
    • 如何进行C语言数据结构与算法中的排序总结
      这篇文章将为大家详细讲解有关如何进行C语言数据结构与算法中的排序总结,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、前言学习目标:排序和查找密不可分,将待处理的数据按关键值大小有序排列后,...
      99+
      2023-06-22
    • C语言数据结构之堆排序的优化算法
      目录1.堆排序优化算法1.1建堆的时间复杂度1.1.1 向下调整建堆:O(N)1.1.2 向上调整建堆:O(N*logN)1.2堆排序的复杂度1.2.1原堆排序的时间复杂度...
      99+
      2022-11-13
    • C语言植物大战数据结构希尔排序算法
      目录前言一、插入排序1.排序思路2.单趟排序详细图解3.整体代码4.时间复杂度(1).最坏情况下(2).最好情况下(3).基本有序情况下(重点)5.算法特点二、希尔排序1.希尔从哪个...
      99+
      2022-11-13
    • C语言数据结构经典10大排序算法刨析
      1、冒泡排序 // 冒泡排序 #include <stdlib.h> #include <stdio.h> // 采用两层循环实现的方法。 // 参数a...
      99+
      2022-11-13
    • c语言中有哪些排序的方法
      这期内容当中小编将会给大家带来有关c语言中有哪些排序的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、选择排序-简单选择排序选择排序是最简单的一种基于O(n2)时间复杂度的排序算法,基本思想是从i=...
      99+
      2023-06-20
    • Java数据结构常见排序算法有哪些
      今天小编给大家分享一下Java数据结构常见排序算法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、 认识排序在学校中...
      99+
      2023-07-05
    • C语言详解数据结构与算法中枚举和模拟及排序
      目录枚举连号区间数递增三元组二分双指针前缀和模拟特别数的和错误票据排序快速排序归并排序枚举 连号区间数 来源:第四届蓝桥杯省赛C++B组,第四届蓝桥杯省赛JAVAB组 小明这些天一直...
      99+
      2022-11-13
    • C语言中有哪些简单的排序算法
      这篇文章主要介绍“C语言中有哪些简单的排序算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中有哪些简单的排序算法”文章能帮助大家解决问题。1.冒泡排序(Bubble Sort)基本思想:冒泡...
      99+
      2023-07-05
    • 【数据结构与算法】堆与堆排序
      目录 一.堆的实现1.堆的概念2.堆的代码实现二.堆排序的讲解 一.堆的实现 1.堆的概念 堆是一种数据结构,首先它总是一颗完全二叉树(因为堆适合表示完全二叉树),在逻辑上堆是一颗...
      99+
      2023-09-04
      php 开发语言 原力计划
    • C语言中的结构体快排算法
      目录C语言结构体快排算法基于结构体数组的快速排序C语言结构体快排算法 代码: #include<stdio.h> #include<string.h> #i...
      99+
      2022-11-16
      C语言结构体 结构体快排算法 C结构体快排算法
    • 数据结构与算法之手撕排序算法
      目录前言为什么要学习排序算法?一.排序的概念及其应用1.1排序的概念1.2排序运用1.3 常见的排序算法二.排序算法分类1.插入排序1.1基本思想:1.2直接插入排序:1.3 希尔排...
      99+
      2023-05-16
      Java数据结构与算法 Java排序算法 数据结构与算法 排序算法
    • C语言数据结构与算法之链表(一)
      目录引言链表的相关思考链表结点结构建立链表实现插入操作完整代码引言 在存储一大波数的时候,我们通常使用的是数组,但是数组有时候又会显得不够灵活,比如下面这个例子: 有一串已经排序好的...
      99+
      2022-11-12
    • C语言数据结构与算法之链表(二)
      目录引入模拟链表介绍插入代码实现代码实现  引入 在上一节的学习中我们介绍了C语言如何实现链表,但是,在这一章,我们将抛开令人头秃的指针和结构体,我们将另外使用一种数组来实现的方式,...
      99+
      2022-11-12
    • C语言数据结构与算法之单链表
      目录基本概念读取数据元素获取第i个结点的数据元素插入数据元素 初始化链表打印链表顺序表查空顺序表的删除 删除第i个结点及其数据元素情况1:当删除的是第一个元素情况2:除第一个结点外完...
      99+
      2022-11-12
    • java数据结构与算法(快速排序法)
      快速排序法: 顾名思议,快速排序法是实践中的一种快速的排序算法,在c++或对java基本类型的排序中特别有用。它的平均运行时间是0(N log N)。该算法之所以特别快,主要是由于非...
      99+
      2022-11-13
    • C语言数据结构经典10大排序算法实例分析
      今天小编给大家分享一下C语言数据结构经典10大排序算法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、冒泡排序//...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作