排序概念
排序:将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
排序定义
假设含n个记录的序列为:
{R0,R1,...,R(n-1)} (1)
其相应的关键字序列为:
{K0,K1,...,K(n-1)} (2)
需确定0,1,2,n-1的一种排序p0,p1,...,p(n-1),使其相应的关键字满足如下的非递减(或非递增)关系:
Kp0<=Kp1<=...<=Kp(n-1)
即使式(1)的序列成为一个按关键字有序的序列:
{Rp0,Rp1,...,Rp(n-1)} (3)
稳定排序和不稳定排序
关键Ki可以是记录Ri(i=0,1,2,...,n-1)的主关键字,也可以是记录Ri的次关键字,甚至是若干数据项的组合。
若Ki是主关键字,则任何一个记录的无序序列经排序后得到的结果是唯一的;
若Ki是次关键字,则排序的结果不唯一,因为待排序的记录序列中可能存在两个或两个以上关键字相等的记录。
若Ki = Kj(0<=i<=n-1,0<=j<=n-1,i!=j),且在排序前的序列中Ri领先于Rj(即i
排序的分类
内部排序:待排序记录存放在计算机随机存储器中进行的排序过程
外部排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。
内部排序的分类——不同原则
插入排序、交换排序、选择排序、归并排序、计数排序
内部排序的分类——工作量
- 简单的排序方法,时间复杂度为O(n^2)
- 先进的排序方法,时间复杂度为O(nlogn)
- 基数排序,时间复杂度为O(d * n)
排序需要的基本操作
(1)比较两个关键字的大小;(必要)
(2)将记录从一个位置移动至另一个位置。(通过改变记录的存储方式来予以避免)
待排序记录序列的存储方式
(1)待排序的一组记录存放在地址连续的一组存储单元上。在序列中相邻的两个记录Rj和Rj+1(j=0,1,...,n-1),它们的存储位置也相邻。在这种存储方式中,记录之间的次序关系由其存储位置决定,而实现排序必须借助移动记录。
(2)一组待排序记录存放在静态链表中,记录之间的次序关系由指针指示,则实现排序不需要移动记录,仅需修改指针即可。——链表排序
(3)待排序记录本身存储在一组地址连续的存储单元内,同时另设一个指示各个记录存储位置的地址向量,在排序过程中不移动记录本身,而移动地址向量中这些记录的“地址”,在排序结束之后再按照地址向量中的值调整记录的存储位置。——地址排序