《数据结构》(C语言版)第十章-内部排序.pptxVIP

  • 0
  • 0
  • 约1.93万字
  • 约 10页
  • 2025-06-27 发布于四川
  • 举报

《数据结构》(C语言版)第十章-内部排序.pptx

10.1概述

10.2插入排序

10.3快速排序

10.4选择排序

10.5归并排序

10.6基数排序

10.7各种排序方法的综合比较

第十章内部排序

了解排序的定义和各种排序方法的特点。

01

熟悉各种方法的排序过程及其依据的原则。

02

掌握各种排序方法的时间复杂度的分析方法。能从“关键字间的比较次数”分析排序算法的平均情况和最坏情况的时间性能。

03

理解排序方法“稳定”或“不稳定”的含义,弄清楚在什么情况下要求应用的排序方法必须是稳定的。

04

学习提要:

直接插入排序、折半插入排序、起泡排序、简单选择排序等排序方法的算法思想、实现和效率分析。

希尔排序、快速排序、堆排序、归并排序等高效方法。

02

01

重难点内容:

10.1概述

一、什么是排序

三、内部排序的方法

二、内部排序和外部排序

一、什么是排序?

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。

例如:将下列关键字序列

52,49,80,36,14,58,61,23,97,75

调整为

14,23,36,49,52,58,61,75,80,97

一般情况下,

1

假设含n个记录的序列为{R1,R2,…,Rn}

2

其相应的关键字序列为{K1,K2,…,Kn}

3

这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系:

4

Kp1≤Kp2≤…≤Kpn

5

按此固有关系将上式记录序列重新排列为

6

{Rp1,Rp2,…,Rpn}

7

的操作称作排序。

8

假设Ki=Kj(1≤i,j≤n,i≠j),且在排序前的序列中Ri领先于Rj(即ij)。

01

若排序后的序列中Ri仍领先于Rj,则称所用的排序方法是稳定的;

02

反之,若可能排序后的序列中Rj领先于Ri,则称使用的排序方法是不稳定的。

03

例如:

(14,36,49,49,52,80)

排序后

(52,49,80,36,14,49)

排序前

(14,36,49,49,52,80)

稳定

不稳定

内部排序和外部排序

若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序;

反之,若参加排序的记录数量很大,

整个序列的排序过程不可能在内存中

完成,则称此类排序问题为外部排序。

无序序列区

无序序列区

经过一趟排序

有序序列区

有序序列区

内部排序的过程是一个逐步扩大

记录的有序序列长度的过程。

三、内部排序的方法

基于不同的“扩大”有序序列长度的方法,内部排序方法大致可分下列几种类型:

插入类

交换类

选择类

归并类

其它方法

插入类

将无序子序列中的一个或几个记录“插入”到有序序列中,从而增加记录的有序子序列的长度。

01

02

交换类

1

通过“交换”无序序列中的记录从而得到其中关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度。

2

选择类

从记录的无序子序列中“选择”关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度。

归并类

其它方法

通过“归并”两个或两个以上的记录有序子序列,逐步增加记录有序序列的长度。

待排记录的数据类型定义如下:

#defineMAXSIZE1000//待排顺序表最大长度

typedefintKeyType;//关键字类型为整数类型

typedefstruct{

KeyTypekey;//关键字项

InfoTypeotherinfo;//其它数据项

}RcdType;//记录类型

typedefstruct{

RcdTyper[MAXSIZE+1];//r[0]闲置

intlength;//顺序表长度

}SqList;//顺序表类型

直接插入排序

01

表插入排序

02

希尔(Shell)排序

03

折半插入排序

2插入排序

04

A

E

D

B

C

R[i]

无序序列R[i..n]

无序序列R[i+1..n]

有序序列R[1..i]

有序序列R[1..i-1]

一趟插入排序的基本思想:

将R[i]插入(复制)到R[j+1]的位置上。

将R[j+1..i-1]中的所有记录均后移

一个位置;

在R[1..i-1]中查找R[i]的插入位置,

R[1..j].keyR[i].

文档评论(0)

1亿VIP精品文档

相关文档