排序的基本概念
排序:
假设含有n个记录的序列为{r1, r2, ... rn},其相应的关键字分别为{k1, k2, ... kn},需确定1, 2 ... n的一种排列p1, p2, ... pn,使其相应的关键字满足kp1 ≤ kp2 ... ≤ kpn非递减(或非递增)关系,即使得序列成为一个按关键字有序的序{rp1,rp2, ... rpn},这样的操作就称为排序。
注意问题:
1.在排序问题中,通常将数据元素称为记录。
2.可以将排序看成是线性表的一种操作。
3.对同一个记录集合,针对不同的关键字进行排序,可以得到不同的序列。
4.这里的关键字ki可以是记录r的主关键字,也可以是次关键字,甚至是若干数据项的组合。
排序的稳定性:
假设ki=kj(1≤i≤n, 1≤j≤n, i≠j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后ri仍领先于rj,则称所用的排序方法是稳定的;反之,若排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的。
内排序:
在整个排序过程中,待排序的所有记录全部被放置在内存中。
内排序主要分为:插入排序、交换排序、选择排序、归并排序。(这些都是比较成熟的排序技术,已经被广泛地实践中,甚至都已经封装了关于排序算法的实现代码。因此,我们学习这些排序算法更多的是为了提高我们编写算法的能力)
外排序:
在整个排序过程中,由于待排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内存和外存之间多次交换数据才能进行。
对于内排序来说,算法的性能主要受3个方面的影响:
1.时间性能
在内排序中,主要进行两种操作:比较和移动。
高效率的内排序算法应该是具有尽可能少的关键字比较次数和尽可能少的记录移动次数。
2.辅助空间
3.算法的复杂性
这里是指算法本身的复杂度,而不是指算法的时间复杂度。
算法过于复杂也会影响排序的性能。