排序

2021/8/19 23:36:14

本文主要是介绍排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  排序方法的分类:按存储介质可分为:内部排序:数据量不大,数据在内存,无需内外存交换数据;外部排序:数据量较大,数据在外存(文件排序)。按比较器个数可分为:串行排序:单处理机(同一时刻比较一对元素);并行排序:多处理机(同一时刻比较多对元素)。按主要操作可分为:比较排序:用比较的方法:插入排序,交换排序,选择排序,归并排序;基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。按辅助空间可分为:原地排序:辅助空间用量为O(1)的排序方法(所占的辅助存储空间与参加排序的数据量大小无关);非原地排序:辅助空间用量超过O(1)的排序方法。按稳定性可分为:稳定排序:能够使任何数值相等的元素,排序后相对次序不变;非稳定排序:不是稳定排序的方法。按自然性可分为:自然排序:输入数据越有序,排序的速度越快的排序方法;非自然排序:不是自然排序的方法。

  希尔排序:隔间隔进行排序,间隔一次次减小,最后一个必须是间隔1,不稳定。

  快速排序:通过一趟排序,选定一份中间数作为参考,将待排序记录分割成独立的两部分,左边的部分均比中间数小,右边的部分均比中间数大。快速排序的特点:输入数据次序越乱,所选划分元素值的随机性越好,排序速度越快,快速排序不是自然排序的方法。

  堆排序:堆的定义:若n个元素的序列(a1,a2...,an)满足ai<=a2i,ai<=a2i+1或ai>=a2i,ai>=a2i+1则分别称该序列为小根堆或大根堆。堆实质是满足二叉树中任一非叶子结点均小于或大于他的孩子结点的完全二叉树。若在输出堆顶的最小值(最大值)后使得n-1个元素的序列又建成一个堆,则得到n个元素的次小值(次大值)反复使能得到一个有序序列,这个过程称之为堆排序。堆的调整:小根堆:输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左右子树的根结点进行比较,并于其中小者进行交换;重复上述操作直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为筛选。

  归并排序:将两个或两个以上的有序子列归并为一个有序序列,在内部排序中常用两个位置相邻的有序子序列归并为一个有序序列,整个排序仅需[log2n]趟。

  基数排序:也称桶排序或箱排序:设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再按序号将非空的连接。数字是有范围的,均由0-9这十个数字组成,则只需设置十个箱子,相继按个,十,百...进行排序,稳定。

 

  



这篇关于排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程