基数排序:各位、十位、百位进行排序
大部分的只是带着理解去记忆,因为你会忘记的。因为东西太多了,而且深入的就理解不了了
对排序的分析:时间、空间、稳定性
直接插入排序:
标准的等差数列,时间复杂度也就是O(N^2)
没有开额外的空间,空间复杂度为O(1)
稳定
关于稳定性:记住,稳定性不是说在不同的数据样本中效率会波动
稳定性是指:相同的值,相对顺序不变
举个例子,例如一组数据有100个,其中有两个数据都是5
稳定性就是,原始数据中的前面的5和后面的5,在排序过后的序列,相对顺序依旧不变,就是稳定性
因为,在现实的生活中,比较的就不仅仅是数据,还需要考虑其他的因素
希尔排序:
时间复杂度:O(N^1.3)
空间复杂度:O(1)
不稳定
为什么不稳定?因为相同的值可能会分在不同组,预排序的时候就会打乱相对顺序
选择排序:每一次选出最小的和最大的放在最左边和最右边
时间:O(N^2)
空间复杂度:O(1)
不稳定
例如,9 9 5 的时候,9的相对顺序就会改变
堆排序:数组建立二叉树结构,上下调整大小堆
时间:O(N * log N)
空间:O(1)
不稳定
例如,2 2 2 1 0 建立的大堆,要进行升序排序,由于是父亲大于等于孩子,所以,是左孩子还是右孩子都有可能,导致位置发生变化
冒牌排序:
时间:O(N^2)
空间:O(N^2)
稳定(相同的数不交换)
快速排序:选key,小的在左边,大的在右边
时间:O(N *n logN)
空间:O(logN) 因为,最多开到递归最底层的空间数,往回的时候就不再开辟空间,时间是累积,空间不累积
因此,递归的空间复杂度主要看深度
不稳定
主要是key,会改变相同值的相对顺序 5 5 ..... 5
归并排序:
时间:O(N * log N)
空间:O(N) 要开一个tmp用来拷贝数据
稳定,取小的尾插,相等的也尾插,如果有相等的值,也会是左边区间的先进来,然后才是右边区间,相对顺序不改变