排序算法及时间空间复杂度

非线性时间比较类排序

 

一、交换类排序:冒泡排序和快速排序

冒泡排序:从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数                 组有序,排序结束。

平均时间复杂度: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

 

 

 

线性时间非比较类排序

 

一、计数排序

二、基数排序

三、桶排序

 

posted @ 2018-01-23 12:44  程序图  阅读(304)  评论(0编辑  收藏  举报