十大排序算法简单总结与对比

假设排序均从小到大排序 

排序算法 工作原理 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定排序
冒泡排序 把相邻元素两两比较,若左侧的元素大于右侧的元素,则交换,否则不交换。(每一轮最大的会跑到最右边) O(n^{2} O(n^{2} O(1) 稳定
快速排序 使用分治法的思想,每一轮选择一个基准元素,让大于它的元素移动到数列的一边,从而把数列分成两部分。 O(nlogn)

O(n^{2}

O(1) 不稳定
选择排序 每一轮选择最小的元素直接交换到最左侧。

O(n^{2}

O(n^{2}

O(1) 不稳定
插入排序 维护一个有序区,把元素一个个插入有序区的适当位置,直到所有元素有序位置。

O(n^{2}

O(n^{2}

O(1) 稳定
希尔排序 (插入排序的升级)将原始数组逐步分组粗调,再进行插入排序的思想 O((nlogn)^2) O((nlogn)^2) O(1) 不稳定
归并排序 先分组后归并(三个指针) O(nlogn) O(nlogn) O(n) 稳定
计数排序 O(n+m) O(n+m) O(m) 稳定
基数排序 把字符串元素按位拆分,每一位进行依次计数排序。 O(n+m) O(n+m) O(n+m) 稳定
桶排序 创建桶,并确定每一个桶的区间范围;遍历原始数列,把元素对号入座放入各个桶中;对每个桶内的元素分别进行排序;遍历所有的桶,输出所有元素。 O(n) O(n) O(n) 稳定
堆排序 1、把无序数组构建成二叉堆。需要从小到大排序,则构建成最大堆;需要从大到小排序,则构建最小堆;2、循环删除栈顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。 O(nlogn) O(nlogn) O(1) 不稳定

猜你喜欢

转载自blog.csdn.net/weixin_45922730/article/details/130388847
今日推荐