Sorting Algorithm-PreKnowledge

作为《大话数据结构》的笔记


一、什么是排序

假设含有n个记录的序列{R1,R2,...,Rn},其相应的关键字分别为{k1,k2,...,kn},需确定1,2,...,n的一种排列p1,p2,...,pn,使其相应的关键字满足kp1<=kp2<...<=kpn非递减(或非递增)关系,即使得序列成为一个按关键字有序的序列{Rp1,Rp2,...,Rpn},这样的操作就称为排序。

Ex:ABCD的成绩如下

A       75

B       98

C       63

D       87

按成绩从大到小排序     结果为BDAC


二、排序的稳定性

假设ki=kj(1<=i<=n,1<=j<=n,i!=j),且在排序前的序列中Ri领先于Rj(即i<j)。如果排序后Ri仍领先于Rj,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中Rj领先Ri,则称所用的排序方法不稳定。

Ex:ABCD的原排列如下

A      75

B      75

C      87

D      96

稳定的排序结果          DCAB(AB的相对位置没有变)

不稳定的排序结果      DCBA(AB的相对位置变了)


三、内排序与外排序

根据在排序过程中待排序的记录是否全部被放置在内存中,排序分为:内排序和外排序

内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。

外排序是由于排序记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。


四、内排序的算法性能(这里介绍的算法都是内排序)

1、时间复杂度

在内排序中,主要进行两种操作:比较和移动。比较指关键字之间的比较,这是要做排序最起码的操作。移动指记录从一个位置移动到另一个位置。高效率的内排序算法应该是具有尽可能少的关键字比较次数和 尽可能少的记录移动次数。

2、空间复杂度

除了存放待排序所所占用的存储空间之外,执行算法所需要的其他存储空间。


五、分类

按照算法的复杂度分为两大类

简单算法:冒泡排序、简单选择排序、直接插入排序

改进算法:希尔排序、堆排序、归并排序、快速排序


我们学习这些排序算法的目的更多并不是为了去在现实中编程排序算法,而是通过学习来提高我们编程算法的能力,以便于去解决更多复杂和灵活的应用性问题。




你可能感兴趣的:(数据结构,排序算法)