八 大 排 序

 

  1. 直接插入排序:

  类似扑克牌游戏,每次插入时,都为其寻找一个合适的位置,越有序越快,稳定

   平均时间复杂度:o(n*n)

   最好时间复杂度:o(n)

   空间复杂度:o(1)

八大排序

 2.希尔排序

对大量的数据进行分组,减少时间复杂度。有一个增量序列,

最后一个必须是1。

跳跃式的排序,所以并不稳定

时间复杂度:o(n^1.3)~o(n^1.5)

空间复杂度:o(1)

第一次分组:

八大排序

第二次分组:

八大排序

 

 

第三次分组:

八大排序

 

八大排序

 

 

 

八大排序

 3.冒泡排序:

两两进行比较,每次将最大的沉底,稳定

时间复杂度:o(n*n)

空间复杂度:o(1)

八大排序

 

八大排序

 

 

 

4.快速排序

 第一次选择数据最前面的作为基准,基准位置为low,最后一个位置为high,从high位置找比基准小的数据,找不到就high--,直到找到比基准小的数据,把该数据放在现在基准位置,从low位置开始找比基准大的数据,找不到就low++,找到就把该数据放在high位置,如此重复,直到low与high指向同一位置,该位置就是基准的位置,然后如果基准左右的数据个数大于1,则再分别对其左右进行上述步骤,直到没有数据再需要排序。不稳定,越有序越慢,最坏时间复杂度:o(n*n)(选择排序)

时间复杂度:o(n*log2n)

空间复杂度:o(log2n)

八大排序

八大排序

八大排序

递归实现:

八大排序

 

 

 

八大排序

八大排序

非递归实现:

八大排序

八大排序

5.选择排序

 

每次选择当前最小的数据放在当前的最前面,不稳定

时间复杂度:o(n*n)

空间复杂度:o(1)

八大排序

 

 

6.堆排序

首先建立大根堆(父大于子)然后再将当前的根与当前的最后一个数字交换。再进行调整,使该树依然是大根堆。直到所有的数字比较完成。

建立大根堆的时间复杂度:o(n*log2N)

堆排序的时间复杂度:o(n*log2N)

空间复杂度O(1)

八大排序

八大排序

 

八大排序

7.归并排序

一个数字默认有序

然后让其两两有序,再四四有序,再八八有序,直至所有数字都有序,稳定

时间复杂度:o(n*log2N)

空间复杂度:o(n)

八大排序

八大排序

 

八大排序

8.基数排序(桶排序)

多关键字(出去的时候类似队列)

先排权重小的(个位),再排权重大的(百位)。依次类推,直至排完。

 

d趟数

r桶个数

n数字个数

时间复杂度:O(d*n)

空间复杂度O(n)

八大排序

 

 

八大排序

八大排序

八大排序

八大排序

八大排序

相关文章: