排序就是将一个元素的任意序列重排成一个按关键字有序的序列。
如果使用某一排序算法排序后,Ri和Rj的相对位置并未发生变化,则称这个排序算法是稳定的。否则就称这个算法是不稳定的。
内部排序:在排序期间,元素全部存放在内存中的排序;
外部排序:在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断的在内外存之间移动的排序。
插入排序:每一次将一个待排序的记录,按其关键字的大小插入到前面已经排好序的子序列中的合适位置上,知道全部记录插入完成。
直接插入排序:从后往前一直插入到已经排好序的位置。
时间复杂度:o(n2). 空间复杂度:o(1) 稳定的 既适用于顺序存储的线性表,也适用于链式存储的线性表。
折半插入排序:确定当前记录在前面有序子数组中的位置时,直接插入排序是采用顺序查找法,而折半插入则采用折半查找法,所以他适用于顺序查找的线性表
时间复杂度:o(n2) 稳定的排序方法
仅适用于顺序存储的线性表。
希尔排序:基本思想:首先取一个小于n的步长di,把表中全部记录分成d1的组,所有距离为d1的记录放在同一组中,在各组中进行直接插入排序,然后取第二个步长d2<d1,重复上述过程,直到所取到的dt=1,即所有记录都放在同一组中了,由于此时整个表中记录已经基本有序,所以,最后进行一次直接插入排序,可以很快得到最终结果。
空间复杂度: o(1) 时间复杂度: o(n1.3) 不稳定的排序算法
冒泡排序:基本思想:设待排序的表长为n,从后往前两两比较元素,若逆序则交换他们,则一次排序之后得到了最小的元素在最上层,下一次冒泡排序的时候,最小的那个元素就不进行比较了。剩下的进行下一次的冒泡。
空间复杂度: o(1) 时间复杂度: o(n2) 稳定的排序算法
快速排序:基本思想:在冒泡排序的基础上改进而来。基于分治的思想。
在表中取某一元素为基准元素,将数组划分成两个子数组,使得前一个数组的元素都小于基准元素,后面的都大于基准元素,所以基准元素是放在了其应该在的位置,然后对左右两边的数组进行递归,从而完成整个排序。
是一种不稳定的排序算法。
选择排序:
简单的选择排序:将最小的元素找出来放在最前面,在剩下的元素中继续找出最小元素放在第二个位置,以此类推,每次选出一个元素,即可以确定其在有序序列中的最终位置。
时间复杂度: o(n2),空间复杂度:o(1) 是一种不稳定的排序方法。
堆排序:利用二叉树