写了一点的算法笔记

几种排序算法总结


排序的定义

对一序列对象根据某个关键字进行排序。

这里简单总结下各种排序的特点:

画个表


稳定性:若a=b,排序后相对位置不变即稳定,否则为不稳定
时间复杂度:一个算法执行所耗费的时间
空间复杂度:一个算法执行所耗费的内存
排序方式:内排序—在内存中完成排序,外排序—在硬盘中完成排序

平均时间复杂度 最好情况 最坏情况 空间复杂度 排序方式 稳定性
冒泡排序 O(n2) O(n) O(n2) O(1) In-place 稳定
选择排序 O(n2) O(n2) O(n2) O(1) In-place 不稳定
插入排序 O(n2) O(n) O(n2) O(1) In-place 稳定
希尔排序 O(n log n) O(n log2n) O(n log2n) O(1) In-place 不稳定
归并排序 O(n log n) O(n log n) O(n log n) O(n) Out-place 稳定
快速排序 O(n log n) O(n log n) O(n2) O(log n) In-place 不稳定
堆排序 O(n log n) O(n log n) O(n log n) O(1) In-place 不稳定
计数排序 O(n + k) O(n + k) O(n + k) O(k) Out-place 稳定
桶排序 O(n + k) O(n + k) O(n2) O(n + k) Out-place 稳定
基数排序 O(n * k) O(n * k) O(n * k) O(n + k) Out-place 稳定

冒泡排序

从最简单的冒泡排序开始总结,差不多是每个人接触的第一个排序算法。它重复地在排序的数列上跑,一次比较两个元素,如果顺序不对就把他们两个互相交换,每次从头开始,每次完成一个。

选择排序

每次选择序列中最小的第一个放到未排序序列的起始位置,这个元素就是已排好序列了,然后继续在未排序的序列中找最小值,放到已排序序列的末尾,以此类推。

插入排序

插入排序像玩扑克牌一样排序,对于一个未排序的序列,一个一个往前扫描,当它大于前面的数并且小于后面的数时,将这个数插入到这个位置,此时这一段数列就是排序后的序列了,再将未排序序列中的元素从后往前和排序完成的序列挨个比较,以此类推。

未完待续

你可能感兴趣的:(写了一点的算法笔记)