排序

7.排序

(1)排序的基本概念

排序Sorting)是计算机程序设计中的一个重要操作,它的功能是讲一个数据元素或记录的任意序列,重新排列成一个按关键字有序的序列。

由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是带排序记录存放在计算机随机存储器中进行排序过程;另一类是外部排序,指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。

通常,在排序的过程中需要进行下列两种基本操作:(1)比较两个关键字的大小;(2)将记录从一个位置移动到另一个位置。前一个操作对大多数排序方法来说都是必要的,而后一个操作可以通过改变记录的存储方式来予以避免。

待排序的记录序列有下列3种存储方式:
(1)待排序的一组记录存放在地址连续的一组数据单元上。它类似于线性表的顺序存储结构,在序列中相邻的两个记录Rj和Rj+1它们的存储位置也相邻。在这种存储方式中,记录之间的次序关系由其存储位置决定,则实现排序必须借助移动记录。

(2)一组待排序的记录存放在静态链表中,记录之间的次序关系由指针指示,则实现排序不需要移动记录,仅需修改指针即可。

(3)待排序记录本身存储在一组地址连续的存储单元内,同时另设置一个指示各个记录存储位置的地址向量,在排序过程中不移动记录本身,而移动地址向量中这些记录的“地址”,在排序结束后在按照地址向量中的值来调整记录的存储位置。

第二种存储方式下实现的排序称为链排序,在第三种存储方式下实现的排序称为地址排序

本章讨论第一种存储方式待排序的一组记录存放在地址连续的一组数据单元上。

在这里插入图片描述

(2)插入排序

直接插入排序

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入已排好序的有序表中,从而的到一个新的、记录增1的有序表。
在这里插入图片描述
在这里插入图片描述

其他插入排序

折半插入排序
由于插入排序的基本操作是在一个有序表中进行查找和插入,查找操作可利用折半查找来实现,由此进行的插入排序操作称之为折半插入排序(Binary Insertion Sort)。
在这里插入图片描述
2-路插入排序
2-路插入排序是在折半插入排序的基础上改进,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。
在这里插入图片描述
表插入排序
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)简单选择排序

每趟找出最小的放到最前面。
在这里插入图片描述
在这里插入图片描述

(4)希尔排序

Shell’s Sort又称“缩小增量排序”(Diminishing Increment Sort),它也是一种属于插入排序类的方法,但在时间复杂度较前述几种方法有所改进。
它的基本思想是:先将整个待排记录序列分割成若干个子序列分别进行直接插入排序进行改进得到的一种插入排序方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)快速排序

冒泡排序

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换之,然后比较第二个和第三个记录的关键字。一趟排序过后的结果是使得关键字最大的记录被安置到最后一个记录的位置上。
在这里插入图片描述

快速排序

快速排序Quick Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

一趟快速排序的具体做法是:附设两个指针low和high,它们的初值分别为low和high,设枢轴记录的关键字为pivotkey,则首先从high所指位置起向前搜索到第一个关键字小于pivotkey的记录和枢轴记录互相交换,重复这两步直至low=high为止。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)堆排序

Heap Sort只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(7)归并排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(8)基数排序

在这里插入图片描述
链式基数排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(9)排序算法的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值