排序算法及时间空间复杂度
非线性时间比较类排序
一、交换类排序:冒泡排序和快速排序
冒泡排序:从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数 组有序,排序结束。
平均时间复杂度:n方
空间复杂度:1
如果用5秒存10个数据,那么20个数据需要多长时间?时间复杂度是n方
10*10=100 20*20=400 400/100=4 4*5=20
快速排序:快速排序又称分区交换排序,是对冒泡排序的改进,快速排序采用的思想是分治思想。
从待排序的n个记录中任意选取一个记录(通常选取第一个记录)为分区标准;
把所有小于该排序列的记录移动到左边,把所有大于该排序码的记录移动到右边,中间放所选记录,称之为第一趟排序;
然后对前后两个子序列分别重复上述过程,直到所有记录都排好序。
时间复杂度:log以2为底n的对数
空间复杂度:log2n~n
二、插入类排序:直接插入排序和shell排序
直接插入排序:从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。
时间复杂度:n方
空间复杂度:1
三、选择类排序:简单选择排序(直接选择排序) 堆排序 (完全二叉树) 归并排序
简单选择排序:从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下 最后一个数据元素为止。
时间复杂度:n方
空间复杂度:1
线性时间非比较类排序
一、计数排序
二、基数排序
三、桶排序