好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言排序与查找.docx

10页
  • 卖家[上传人]:c**
  • 文档编号:291127899
  • 上传时间:2022-05-11
  • 文档格式:DOCX
  • 文档大小:20.19KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 本文格式为Word版,下载可任意编辑C语言排序与查找 C语言五种根本排序算法 1. 2. 3. 4. 5. 插入排序(insertionsort.) 交换排序(exchangesOrt) 选择排序(selectionsort) 归并排序(mergesort) 分布排序(distributionsort) 为了形象地解释每种排序算法是怎样工作的,让我们来看一看怎样用这些方法对桌上一付乱序的牌举行排序牌既要按花色排序(依次为梅花、方块、红桃和黑心),还要按点数排序(从2到A) 插入排序的过程为: 从一堆牌的上面开头拿牌,每次拿一张牌,按排序原那么把牌放到手中正确的位置桌上的牌拿完后,手中的牌也就排好序了 交换排序的过程为: (1)先拿两张牌放到手中假设左边的牌要排在右边的牌的后面,就交换这两张牌的位置 (2)然后拿下一张牌,并对比最右边两张牌,假设有必要就交换这两张牌的位置 (3)重复第(2)步,直到把全体的牌都拿到手中 (4)假设不再需要交换手中任何两张牌的位置,就说明牌已经排好序了;否那么,把手中的牌放到桌上,重复(1)至(4)步,直到手中的牌排好序。

      选择排序的过程为: 在桌上的牌中找出最小的一张牌,拿在手中;重复这种操作,直到把全体牌都拿在手中 归并排序的过程为: 把桌上的牌分为52堆,每堆为一张牌由于每堆牌都是有序的(记住,此时每堆中只有一张牌),所以假设把相邻的两堆牌合并为一堆,并对每堆牌举行排序,就可以得到26堆已排好序的牌,此时每一堆中有两张牌重复这种合并操作,就可以依次得到13堆牌(每一堆中有4张牌),7堆牌(有6堆是8张牌,还有一堆是4张牌),结果将得到52张的一堆牌 分布排序(也被称作radix sort,即基数排序)的过程为: 先将牌按点数分成13堆,然后将这13堆牌按点数依次叠在一起;再将牌按花色分成4堆,然后将这4堆牌按花色依次叠在一起,牌就排好序了 在选用排序算法时,你还需要了解以下几个术语: 1、自然的(natural) 假设某种排序算法对有序的数据排序速度较快(工作量变小),对无序的数据排序速度却较慢(工作变量大),我们就称这种排序算法是自然的假设数据已接近有序,就需要考虑选用自然的排序算法 2、稳定的(stable) 假设某种排序算法能保持它认为相等的数据的前后依次,我们就称这种排序算法是稳定的。

      例如,现有以下名单: Mary Jones Mary Smith Tom Jones Susie Queue 假设用稳定的排序算法按姓对上述名单举行排序,那么在排好序后\和\Jones”将保持原来的Jr依次,由于它们的姓是一致的 稳定的排序算法可按主、次关键字对数据举行排序,例如按姓和名排序(换句话说,主要按姓排序,但对姓一致的数据还要按名排序)在概括实现时,就是先按次关键字排序,再按主关键字排序 3、内部排序(internal sort)和外部排序(external sort) 待排数据全部在内存中的排序方法被称为内部排序,待排数据在磁盘、磁带和其它外存中的排序方法被称为外部排序 4种根本的C语言查找算法 和排序算法一样,查找(searching)算法也是计算机科学中研究得最多的问题之一查找算法和排序算法是有联系的,由于大量查找算法凭借于要查找的数据集的有序程度 根本的查找算法有以下4种: 1. 2. 3. 4. 依次查找(sequential searching) 对比查找(comparison searching) 基数查找(radix searching) 哈希查找(hashing) 下面依旧以一付乱序的牌为例来描述这些算法的工作过程。

      依次查找的过程为: 从第一张开头查看每一张牌,直到找到要找的牌 对比查找(也被称作binarysearching,即折半查找)要求牌已经排好序,其过程为: 任意抽一张牌,假设这张牌正是要找的牌,那么查找过程终止假设抽出的这张牌比要找的牌大,那么在它前面的牌中重复查找操作;反之,那么在它后面的牌中重复查找操作,直到找到要找的牌 基数查找的过程为: 先将牌按点数分成13堆,或者按花色分成4堆然后找出与要找的牌的点数或花色一致的那一堆牌,再在这堆牌中用任意一种查找算法找到要找的牌 哈希查找的过程为: (1)在桌面上留出可以放若干堆牌的空间,并构造一个函数,使其能根据点数和花色将牌映射到特定的堆中(这个函数被称为hashfunction,即哈希函数) (2)根据哈希函数将牌分成若干堆 (3)根据哈希函数找到要找的牌所在的堆,然后在这一堆牌中找到要找的牌 例如,可以构造这样一个哈希函数: pile=rank+suit 其中,rank是表示牌的点数的一个数值;suit是表示牌的花色的一个数值;pile表示堆值,它将抉择一张牌归入到哪一堆中。

      假设用1,2,……,13分别表示A,2,…….K,用0,1,2和3分别表示梅花、方块、红桃和黑桃,那么pile的值将为1,2,……,16,这样就可以把一付牌分成16堆 哈希查找虽然看上去有些离谱,但它切实是一种分外实用的查找算法各种各样的程序,从压缩程序(如Stacker)到磁盘高速缓存程序(如SmartDrive),几乎都通过这种方法来提高查找速度 C语言排序或查找的性能分析 有关排序和查找的一个主要问题就是速度这个问题经常被人们忽略,由于与程序的其余片面相比,排序或查找所花费的时间几乎可以被疏忽然而,对大多数排序或查找应用来说,你不必一开头就花好多精力去编制一段算法程序,而理应先在现成的算法中选用一种最简朴的(见3.1和3.4),当你察觉所用的算法使程序运行很慢时,再换用一种更好的算法(请参见下文中的介绍) 下面介绍一种判断排序或查找算法的速度的方法 首先,引入一个算法的繁杂度的概念,它指的是在各种处境(最好的、最差的和平均的)下排序或查找需要完成的操作次数,通过它可以对比不同算法的性能 算法的繁杂度与排序或查找所针对的数据集的数据量有关,因此,引入一个基于数据集数据量的表达式来表示算法的繁杂度。

      最快的算法的繁杂度O(1),它表示算法的操作次数与数据量无关 繁杂度O(N)(N表示数据集的数据量)表示算法的操作次数与数据量直接相关繁杂度O(logN)介于上述两者之间,它表示算法的操作次数与数据量的对数有关繁杂度为O(NlogN)(N乘以logN)的算法比繁杂度为O(N)的算法要慢,而繁杂度为O(N2)的算法更慢 留神:假设两种算法的繁杂度都是O(logN),那么logN的基数较大的算法的速度要快些,在本章的例子中,logN的基数均为10 表3.1 本章全体算法的繁杂度 ----------------------------------------------------------------- 算 法 最好处境 平均处境 最坏处境 ----------------------------------------------------------------- 快速排序 O(NlogN) O(NlogN) O(N2) 归并排序 O(N) O(NlogN) O(NlogN) 基数排序 O(N) O(N) O(N) 线性查找 O(N) 折半查找 O(NlogN) 哈希查找 O(N/M)* 健树查找 O(1)** ----------------------------------------------------------------- * M是哈希表项的数目 ** 实际上相当于有232个哈希表项的哈希查找 表3. 1列出了本章全体算法的繁杂度。

      对于排序算法,表中给出了最好的、平均的和最差的处境下的繁杂度,平均处境是指数据随机排列的处境;排序算法的繁杂度视数据的初始排列处境而定,它一般介于最好的和最差的两种处境之间对于查找算法,表中只给出了平均处境下的繁杂度,在最好的处境(即要找的数据恰好在第一次查找的位置)下,查找算法的繁杂度鲜明是O(1);在最坏的处境(即要找的数据不在数据集中)下,查找算法的繁杂度通常与平均处境下的繁杂度一致 需要留神的是,算法的繁杂度只表示当N值变大时算法的速度变慢的程度,它并不表示算法应用于给定大小的数据集时的实际速度算法的实际速度与多种因素有关,包括数据集的数据类型以及所用的编程语言、编译程序和计算机等换句话说,与繁杂度高的算法相比,繁杂度低的算法并不具备十足的优越性实际上,算法的繁杂度的真正意义在于,当N值大于某一数值后,繁杂度低的算法就会明显比繁杂度高的算法快 为了说明算法的繁杂度和算法的实际执行时间之间的关系,表3.2列出了本章全体例子程序的执行时间本章全体例子程序均在一台以Linux为操作系统的90MHz奔腾计算机上由GNU C编译程序编译,在其它操作系统中,这些例子程序的执行时间与表3.2所列的时间是成比例的。

      表3. 2 本章全体例子程序的执行时间 --------------------------------------------------------------------------- 例子程序 算 法 2000 4000 6000 8000 10000 --------------------------------------------------------------------------- 例3.1 qsort() 0.02 0.05 0.07 0.11 0,13 例3.2a 快速排序 0.02 0.07 0.13 0.18 0.20 例3.2b 归并排序 0.03 0.08 0.14 0.18 0.26 例3.2c 基数排序 0.07 0.15 0.23 0.30 0.39 例3.4 bsearch() 0. 37 0.39 0.39 0.40 0.41 例3.5 折半查找 0.32 0.34 0.34 0.36 0.36 例3.6 线性查找 9.67 20.68 28.71 3。

      点击阅读更多内容
      相关文档
      2023年湖北省孝感市应城市东马坊街道招聘社区工作者真题附详细解析.docx (2025秋新版)部编版二年级语文上册全册教学设计.docx 2024年河北省邯郸市魏县北皋镇招聘社区工作者真题参考答案详解.docx 2023年湖南省郴州市桂阳县黄沙坪镇招聘社区工作者真题附详解.docx 2021-2025年中级银行从业资格之中级个人理财通关试题库附完整答案详解【题】.docx 2025年吉林省“入团积极分子”学习考试库及参考答案详解1套.docx 2024年湖南省怀化市沅陵县五强溪镇招聘社区工作者真题参考答案详解.docx 2023年浙江省温州市文成县桂山乡招聘社区工作者真题附详细解析.docx 新人教版二年级数学下册全册教案(非表格式216页).docx 2025年东营市入团积极分子考试题库及参考答案详解.docx 2024年甘肃省陇南市徽县伏家镇招聘社区工作者真题及答案详解1套.docx 2023年湖北省十堰市竹山县官渡镇招聘社区工作者真题带答案详解.docx (2025秋新版)北师大版二年级上册数学全册教学设计.docx 2025年海南省事业单位招聘考试公共基础知识考试试题库及答案详解(全国).docx 2024年河南省漯河市源汇区老街街道招聘社区工作者真题附答案详解.docx 2023年湖南省衡阳市常宁市三角塘镇招聘社区工作者真题带题目详解.docx 2021年CAAC四类无人机执照考试复习题库资料及答案详解一套.docx 统编版五年级上册语文全册教案(表格式).docx 2025年白城市入团考试题库及参考答案详解.docx 2024年黑龙江省齐齐哈尔市克山县向华乡招聘社区工作者真题带答案详解.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.