查找是计算机的一项重要的操作,为了便于查找,通常希望计算机中的关键码是有序的,如有序表的折半查找,效率非常高。排序与查找一样,是一项重要的数据功能。下面了解数据结构中排序的基本概念:
(1)排序码
排序码又称之为关键码,如果数据结构中的关键码互不相同,此关键码称为主关键码!若关键码是主关键码,那么得到排序的结果是唯一的。
(2)排序算法的稳定性
稳定性可理解为两个相同的关键码,排序后的次序应该与排序前的次序是一致的,则称该算法是稳定的,否则不稳定的。
在内部排序中,直接选择排序,希尔排序,快速排序,堆排序是不稳定的。可以通过以下简单的例子判断:2,2,1
直接选择排序:1,2,2.
希尔排序:1,2,2
快速排序:1,2,2
堆排序例子:1,2,2->1,2,2
而冒泡排序,直接插入排序,归并排序则是稳定的。
(3)内排序与外排序
所谓内排序是把待排序序列完全放在内存中进行排序的,此方法适合不太大的元素序列。而外排序则需要访问外存储器,当序列中的元素足够多时,不能完全放到内存,则排序过程需要在内存与外存之间移动大量的数据。
(4)排序算法的时间复杂度与空间复杂度
时间复杂度即算法执行所需要的时间。空间开销指的是所需的辅助空间。
直接插入排序,冒泡排序,希尔排序,直接选择排序时间复杂度为O(n2).
而快速排序,归并排序,堆排序的时间复杂度为O(nlogn).
排序算法分为以下几大类:
(1)几种简单的排序算法
直接插入排序
冒泡排序
希尔排序
直接选择排序
(2)几种快速的排序算法
快速排序
树型选择排序
归并排序
堆排序
(3)外部排序
多路平衡归并排序
下面介绍一下外部排序实现的一般方法:
由于文件比较大,不能完全放入内存,因此,外部排序分为两个相互独立的过程:
首先把n个记录的文件分成k个子文件,把这k个子文件依次读入内存,进行排序,然后把得到的有序子文件重新写入到外存,通常这些有序子文件为归并段或串段,再对这些归并段进行归并直至得到整个有序文件为止。
在以下的文章中会介绍每种排序方法的具体实现。