标签:比较 列表 算法 递增 选择排序 下界 直接插入排序 存储 复杂
排序(重新排列表中的元素,使表中的元素满足关键字递增或递减):
稳定性:设表中有两个元素a,b,其对应关键字x,y,且a在b前面,若排序后,a仍在b前面,则我们说该排序算法是稳定的,否则不稳定
内部排序:值在排序期间元素全部放在内存的排序。
插入排序:每次将一个未排列的元素插入到一个已经排好的子序列中进行排序。
直接插入排序:
查找该元素的插入位置,找到后,将该位置后的所有元素都向后移一位,将该元素插入。(适用于顺序存储和链式存储)
时间复杂度:最后O(n),平均O(n平方),最坏O(n平方)
空间复杂度:O(1)
具有稳定性。
折半插入排序:
相当于二分查找后,在找到第一个大或小于该元素的位置后,将该位置后所有元素后移一位。
(适用于顺序存储)
时间复杂度:O(n平方)
空间复杂度:O(1)
具有稳定性
希尔排序:
从前往后两两比较相邻元素,若顺序错了,则交换位置,直到表尾。(适用于顺序存储,链式存储)
时间复杂度:最好O(n),平均O(n平方)最坏O(n平方)
空间复杂度:O(1)
具有稳定性
快速排序
在待排序的表中选取一个元素为基准key,在key位置前所有元素小于key,在key位置后所有元素大于key。设第一个元素为low,最后一个元素为high,不断交换元素中改变两标记,步骤1,high向前移动找到第一个小于key的元素,2,low向后移动找到第一个比key大的元素,3,交换两元素的位置,4一直操作1,2,3步到low>=high(适用于顺序存储)
时间复杂度:最好=平均为O(nlog2n)最坏O(n平方)
空间复杂度:最好=平均为O(nlog2n)最坏O(n)
不具有稳定性
选择排序:
每一趟在排列元素中选取最小的元素,作为有序子序列的第i个元素,直到待排列元素只剩下一个。
时间复杂度:O(n平方)
空间复杂度:O(1)
不具有稳定性
堆排序:小根堆:若L[i]<=L[2i]且L[i]<=L[2i+1],则成为小根堆(1<=i<=[n/2]取下界)大根堆:若L[i]>=L[2i]且L[i]>=L[2i+1],则成为大根堆(1<=i<=[n/2]取下界)
当孩子结点小于双亲结点,则该结点调整结束,当孩子结点大于双亲结点,则将最大的孩子结点于双亲结点交换,继续排,直到孩子结点都小于双亲结点或出现叶子结点。
时间复杂度:O(nlog2 n)
空间复杂度:O(1)
不具有稳定性
归并排序:
将元素分为若干组,反复进行排列合并直到有序。
时间复杂度:0(log2 n)
空间复杂度:O(n)
具有稳定性。
标签:比较 列表 算法 递增 选择排序 下界 直接插入排序 存储 复杂
原文地址:https://www.cnblogs.com/qw23/p/13290021.html