###排序###
内排序:在排序过程中,若整个表都是放在内存中处理,排序是不涉及内外存数据的交换,则称之为内排序。
外排序:若排序过程中要进行内外存数据的交换,则称之为外排序。
内排序适用于元素个数不是很多的小表,外排序适用于元素个数很多,不能一次将全部元素放入内存的大表。
内排序有:插入排序、交换排序、选择排序、归并排序、基数排序。
1、插入排序:每次将一个待排序的元素,按其关键字大小插入到已经排好序的子表的适当位置,直到全部元素插入完成为止。
插入排序:直接插入排序、折半插入排序、希尔排序。
直接插入排序:有两重循环构成,是稳定排序。
折半插入排序:采用折半查找方法找到插入位置,再通过移动元素进行插入。是稳定排序。
希尔排序:是一种分组插入方法。是不稳定排序。
2、交换排序:两两比较待排序元素的关键字,发现两个元素的次序相反即进行交换,直到没有反序的元素为止。
交换排序:冒泡排序、快速排序。
冒泡排序:整个算法从最下面的元素开始,对每两个相邻的关键字进行比较,且是关键字小的元素换至关键字大的元素之上,使得经过一趟冒泡排序之后,关键字最小的元素到达最上端,依次循环剩下的无序元素。是稳定排序。
快速排序:在排序的n个元素中仍取一个元素(通常取第一个元素)作为基准,比该元素关键字小的元素放置在前一部分,比该元素大的元素放置在后一部分,并将该元素排在两部分中间(归位)。依次对子表进行递归划分,直至子表的长度为0或1。是不稳定排序。
3、选择排序:每一趟从待排序的元素中选出最小的元素,顺序放在已排好序的子表的最后,直到全部元素排序完毕。适用于从大量的元素中选择一部分排序元素。
选择排序:直接选择排序(简单选择排序)、堆排序。
直接选择排序:从当前无序区中选出关键字最小的元素,将它与无序区的第一个元素交换,得到新的有序区和无序区,依次循环。是不稳定排序。
堆排序:不适用于元素数较少的表。是不稳定排序。
4、归并排序:是多次将两个或两个以上的有序表合并成一个新的有序表。是稳定排序。
5、基数排序:是稳定排序。
各种内排序方法的性能比较:
稳定性口诀:插泡归基稳,希速选堆否