排序的基本思想

插入排序。

直接插入排序。直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已经排好序的有序表中,从而得到一个新的、记录数量增1的有序表。
算法步骤:
在这里插入图片描述
算法特点。
一是稳定排序。
二是算法简便容易实现。
三是适用于链式,只是在单链表上无需移动记录,只需修改相应的指针。
四是更适用于初始记录基本有序,正序的情况。

折半插入排序。
折半插入排序与直接插入排序的思想是一样的,只是说这个查找的操作可以利用折半查找来实现。
在算法步骤的修改,就是循环n-1次,每次使用折半查找法 ,后面的都是一样的。

从时间上比较折半查找比顺序查找快。折半插入排序所需要的关键字比较次数与待排序序列的初始排列无关,仅依赖于记录的个数。

算法特点:
一是稳定排序,
二是顺序结构,
三是适合初始记录无序,n较大时的情况。

希尔排序。

希尔排序又称缩小增量排序是插入排序的一种。希尔排序从减少记录个数和基本有序两个方面对直接插入排序进行了改进。

算法步骤。
希尔排序的实质是采用分组插入的方法。 先将整个待排序记录序列分割成几组,从而减少参与直接插入排序的数据量,对每组分别进行直接插入排序,然后增加每组的数据量,重新分组。这样当经过几次分组排序后,整个序列中的记录基本有序时,在对全体记录进行一次直接插入排序。
希尔对记录的分组不是简单的逐段分割,而是将相隔某个增量的记录分为一组。

第1趟取增量d1,把全部的记录分隔成d1个组,所有的间隔为d1的记录分在同一组,在各个组中进行直接插入排序。
第2趟取增量d2,重复上述的分组和排序。
依次类推直到取得的增量为1时,所有的记录在同一组中进行,直接插入排序。

算法特点:
第1记录跳跃式移动导致排序方法不稳定。
第2只能用于顺序存储。
第3是增量序列,可以有各种取法,但增量序列选取的那个数是质数,并且最后一个增量必须是1。
第4是适用于初始记录无序,n较大的情况。

交换排序。

冒泡排序
冒泡排序是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序则交换,从而使关键字小的记录如同气泡一般向上漂浮,左移或者是使关键字大的记录如同石块一样逐渐向下坠落,右移。
在这里插入图片描述算法特点。
一是稳定,
二是用于链式存储,
三是不适用于记录无序,n较大。

快速排序。
快速排序是由冒泡排序改进而得的,在冒泡排序过程中只对相邻的两个记录进行比较,因此每次交换两个相邻记录,只能消除一个逆序,快速排序方法中的一次交换,可以消除多个逆序。

算法步骤。
在待排序的n个记录中,任取一个记录通常取第1个记录作为枢纽,设其关键字为pivotky。经过一趟排序后,把所有关键字小于pivotkey的记录交换到前面,把关键字大于 pivotkey的记录放在后面,结果将大排序记录分为两个子表,最后将枢纽放在分界处的位置,然后分别对左右子表重复上述过程,直至每一个子表只有一个记录时,排序完成。

在这里插入图片描述
算法特点。
快速排序是递归的,执行时需要有一个栈来存放数据。
第一记录非顺次的移动,导致排算法是不稳定的。
第二排序过程中需要定位表的下键和上键所以是用于顺序存储
第三,当n较大时,在平均情况下,快速排序是所有内部排序方法中速度最快的一种,所以其适合于初始记录无序,n较大的情况。

选择排序。
选择排序的基本思想是每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已经排好序的记录序列的后面,直到全部排完为止。

简单选择排序。
算法步骤。
在这里插入图片描述在这里插入图片描述
算法特点。
一是稳定。
二是适用于链式存储结构。
三移动次数较少,当每一记录占用的空间比较多时,此方法比直接插入排序快。

树形选择排序,又称锦标赛排序。堆排序就是树形选择排序的一种。

堆排序是一种树形,选择排序,在排序过程中将待排序的记录r[1…n]。看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子节点之间的内在关系,在当前无序的序列中选择出关键字最大或者是最小的记录。
在这里插入图片描述
堆排序的运行时间主要耗费在建初堆和调整堆时进行的反复筛选上。

算法特点。
一不稳定。
二是用于顺序存储,不能用于链式存储。
三记录较多时较为高效。

归并排序。
归并排序就是将两个或两个以上的有序表合并成一个有序表的过程,将两个有序表合并成一个有序表的过程称为2-路归并。

算法思想。
在这里插入图片描述
算法特点。
一是稳定,
二是链式存储,不需要附加存储空间,但递归时仍需要开辟新的递归工作栈。

基数排序。
基数排序是分配类排序,它不需要比较关键字的大小,只需要根据关键字中各位的值通过对待排序记录进行若干趟的分配与收集来实现排序的是一种借助于多关键字排序的思想对单关键字排序的方法。

有两种排序法。一种是最高位优先法,一种是最低位
优先法。

基本思想。
首先以链表存储n个待排记录,并令表头指针指向第1个记录,然后通过分配和收集操作来完成排序。
第1趟分配和收集对最低位数关键字也就是个位数进行。
第2趟分配和收集是对十位数进行的。
第3趟分配和收集是对百位数进行的。

算法特点。
一是稳定排序,
二是可用于链式也可用于顺序结构,
三是时间复杂度可以突破,基于关键词比较一类方法的下界就是O(nlog2n)达到o(n),
四是基数排序使用条件有严格的要求,需要知道各级关键字的主次关系和各级关键字的取值范围。

外部排序。

外部排序是如果待排序的记录数目很大,无法一次性调入内存,整个排序过程就必须使用外存分批调入内存才能够完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值