内排序、外排序
内排序:
在排序的过程中,待排序的所有记录全部被放置在内存中。
外排序
在排序过程中,由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换才能进行。
本文讲述的排序均为内排序。
排序的稳定性
排序的稳定性指的是待排序的数列当中可能会有两个或两个以上相同的关键字,比如说a0=5,a1=5;在排序前,a0是在a1前面的,排序结束以后,a0仍然在a1前面,则该排序方法是稳定的;若排序后a0在a1后面,则该排序方法是不稳定的。
排序的衡量指标
时间性能
内排序中,主要进行两种操作:比较和移动。高效的排序算法应该具有尽可能少的关键字比较次数和尽可能少的记录移动次数。
辅助空间
有些排序算法,除了需要保存待排序的数列外,排序算法还需要其他存储空间。
算法的复杂性
这里不是指算法的时间复杂度,而是算法本身的复杂性。
排序分类
简单算法:冒泡、简单选择、直接插入
改进算法:希尔、堆、归并、快速
算法的知识点总结
1、选择排序和冒泡排序的比较次数都是一样的,但是选择排序移动次数比冒泡排序少,一趟比较结束以后,才将找到的最小的数进行移动,如果当前数就是最小的,则不移动,一次移动可以保证一个数排好序。所以选择排序虽然时间复杂度上和冒泡发一样,但是性能还是优于冒泡排序。
2、直接插入排序是三种简单排序当中性能最好的,三种简单算法都是稳定的。
3、记录数比较少时,直接插入的优势比较明显。
4、如果待排序序列是基本有序的,可以选用直接插入排序。
5、希尔排序在直接插入排序的基础上,将大量记录数进行分组,分割成若干个子序列。对子序列排序,但每个子序列并不是子序列内部有序,而是要合并以后基本整体有序,然后再对整体的数列进行一次直接插入排序。
6、堆排序是在选择排序的基础上,将选择排序的每一次比较的结果都记录下来,并采用堆这种数据结构来存放数列,由于堆排序初始构建时,所需的比较次数较多,因此,它并不合适排序序列个数较少的情况。
7、归并排序改进算法中唯一稳定的算法,但是归并排序比较占内存,所以内存紧张的情况下,不应该选择归并排序。
8、数列非常小的情况下,快速排序和直接插入排序,选择直接插入排序。
9、快速排序对于少量的数据排序没有优势。
10、对于非常重视稳定性的情况下,可以选择归并排序。
11、排序的数据量不大,但是,每个记录的关键字本身信息量大,即是说,此时关键字占用的内存比较大,移动一次所花的时间较大,故而应尽可能少的移动数据,此时就可以选择简单选择排序。