第8章 排序

前言

       随着信息技术的逐渐普及与全球国际化的影响,企业所拥有的数据量成倍增长。无论庞大的商业应用软件,还是个人的文字处理软件,每项作业的核心都与数据库有莫大的关系,而数据库中最常见且重要的功能就是排序与搜索。

       所谓“排序”(Sorting)就是指将一组数据,按特定规则调换位置,使数据具有某种顺序关系(递增或递减),例如数据库内可针对某一字段进行排序,而此字段称为“键(key)”字段里面的值我们称为“键值(key value)”。

8.1 排序简介

       在排序的过程中,数据的移动方式可分为“直接移动”和“逻辑移动”两种。“直接移动”是直接交换存储数据的位置,而“逻辑移动”并不会移动数据存储位置,仅改变指向这些数据的指针的值。

       两者之间的优劣在于直接移动会浪费许多时间进行数据的移动,而逻辑移动只要改变指针指向的位置就能轻易达到排序的目的。数据在经过排序后,会有下列几点好处:

①数据较容易阅读
②数据较利于统计及整理
③可大幅减少数据搜索的时间

8.1.1排序的分类

8.1.2排序算法分析

  • 算法是否稳定
  • 时间复杂度
  • 空间复杂度

8.2 内部排序法

       各种排序算法称得上是数据结构这门学科的精髓所在。每一种排序方法都有其适用的情况与数据类型。

8.2.1冒泡排序法

8.2.2选择排序法

8.2.3插入排序法

8.2.4希尔排序法

8.2.5合并排序法

8.2.6快速排序法

8.2.7堆积排序法

8.2.8基数排序法

8.3 外部排序法

       当我们所要排序的数据量太多或文件太大,无法直接在内存内排序,而需要依赖外部存储设备时,我们就会使用到外部排序法。外部存储设备又可按照访问方式分为两种,即顺序访问(如磁带)和随机访问(如磁盘)。
       要顺序访问的文件就像表一样,我们必须事先遍历整个表才有办法进行排序,而随机访问的文件就像是数组,数据访问很方便,所以相对的排序也会比顺序访问快一些。一般来说,外部排序法最常使用的就是合并排序法,它适用于顺序访问的文件。

  • 直接合并排序法

小结

  • 排序(Sorting)是指将一组数据,按特定规则调换位置,使数据具有某种顺序关系(递增或递减)。
  • 在排序的过程中,“直接移动”是直接交换存储结构的位置,而“逻辑移动”并不会移动数据存储位置,仅改变指向这些数据的指针的值。
  • 内部排序:排序的数据量少,可以完全在内存内进行排序。
  • 外部排序:排序的数据量无法直接在内存内进行排序,而必须使用到辅助内存(如硬盘)。
  • 排序算法的选择将影响到排序的结果与效率,通常可由以下几点确定:算法是否稳定、时间复杂度、空间复杂度。
  • 稳定的排序是指数据在经过排序后,两个相同键值的记录仍然保持原来的次序。
  • 排序算法的时间复杂度可分为最好情况(Best Case)、最坏情况(Worst Cast)及平均情况(Average Case)。
  • 空间复杂度就是指算法在执行过程中所需付出的额外内存空间。例如所挑选的排序法必须借助递归的方式来进行,那么递归过程中会用到的堆栈就是这个排序法必须付出的额外空间。
  • 冒泡排序为相邻两者相互比较对调,并不会更改其原本排序的顺序,所以是稳定排序法。
  • 选择排序法可使用两种方式排序,一为在所有 的数据中,当由大至小排序,则将最大值放入第一位置;若由小至大排序,则将最大值放入位置末端。
  • 由于选择排序是以最大或最小值直接与最前方未排序的键值交换,数据排列顺序很有可能被改变,故不是稳定排序法。
  • 插入排序法(Insert Sort)是将数组中的元素,逐一与已排序好的数据作比较,再将该数组元素插入适当的位置。
  • 插入排序法适用于大部分数据已经过排序或已排序数据库新增数据后进行排序。
  • 希尔排序法排序的原则是将数据分成特定间隔的几个小区块,以插入排序法排完区块内的数据后再渐渐减少间隔的距离。
  • 希尔排序法和插入排序法一样,都是稳定排序。
  • 合并排序法(Merge Sort)的工作原理乃是针对已排序好的两个或两个以上的文件,经由合并的方式,将其组合成一个大的且已排序好的文件。
  • 快速排序法的原理和冒泡排序法一样都是用交换的方式,不过它会先在数据中找到一个虚拟的中间值,把小于中间值的数据放在左边而大于中间值的数据放在右边,再以同样的方式分别处理左右两边的数据,直到完成为止。
  • 快速排序法是平均运行时间最快的排序法。不过,快速排序法不是稳定排序法。
  • 堆积是一种特殊的二叉树,可分为最大堆积树及最小堆积树两种。堆积排序法不是稳定排序法。
  • 基数排序法不需要进行元素间的比较,而是属于一种分配模式排序方式。
  • 基数排序法按照比较的方向可分为最高位优先(Most Significant Digit First,MSD)和最低位优先(Least Significant Digit First,LSD)两种。MSD法是从最左边的位数开始比较,而LSD则是从最右边的位数开始比较。
  • 当我们所要排序的数据量太多或文件太大,无法直接在内存内排序,而需要依赖外部存储设备时,我们就会使用到外部排序法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值