定义
假设含有 nn 个记录的序列为 ,其相应的关键字分别为 {k1,k2,...,kn}{k1,k2,...,kn},需确定 1,2,...,n1,2,...,n 的一种排列 p1,p2,...,pnp1,p2,...,pn,使其相应的关键字满足 kp1≤kp2≤...≤kpnkp1≤kp2≤...≤kpn 非递减(或非递增)关系,即使得序列称为一个按关键字有序的序列 {rp1,rp2,...,rpn}{rp1,rp2,...,rpn},这样的操作称为排序。
说白了,排序就是对数据元素序列建立某种有序排列的过程。
排序的稳定性
假设 ki=kj(1≤i≤n,1≤j≤n,i≠j)ki=kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中 riri 领先于 rjrj:
- 若排序后 riri 仍领先于 rjrj,则称所用的排序方法是稳定的;
- 若排序后 rjrj 领先于 riri,则称所用的排序方法是不稳定的。
分类
排序分为:内排序和外排序。
- 内排序:在排序整个过程中,待排序的所有记录全部被放置在内存中。
- 外排序:由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外村之间多次交换数据才能进行。
内排序有:
- 插入排序:直接插入排序、希尔排序
- 交换排序:冒泡排序、快速排序
- 选择排序:简单选择排序、堆排序
- 归并排序
按算法复杂度分为两大类:简单算法、改进算法
简单算法:
- 冒泡排序
- 简单选择排序
- 直接插入排序
改进算法:
- 希尔排序
- 堆排序
- 归并排序
- 快速排序