多种排序方式的对比

名称数据对象稳定性平均时间复杂度最坏时间复杂度额外空间复杂度描述
冒泡排序数组稳定O(n^2)O(1)(无序区,有序区)从无序区透过交换找出最大元素放到有序区前端
选择排序数组、链表数组不稳定、链表稳定O(n^2)O(1)(无序区,有序区)在无序区里找一个最小的元素跟在有序区的后面。对于数组,比较的多,换的少
插入排序数组、链表稳定O(n^2)O(1)(无序区,有序区)把无序区里第一个元素插入到有序区的合适的位置。对于数组,比较的少,换的多
快速排序数组不稳定O(nlogn)O(n^2)O(logn)(小数,基准元素,大数)在区间中随机挑选一个元素做基准,将小于基准的元素放在基准的元素之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序
希尔排序数组不稳定O(nlog^2n)O(n^2)O(1)每一轮按照事先决定的间隔进行插入排序,间隔会依次缩小,最后一次一定要是1
归并排序数组稳定O(nlog^2n)O(n)+O(logn)如果不是从下到上把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行
归并排序链表稳定O(nlogn)O(1)把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行
堆排序数组不稳定O(nlogn)O(1)(最大堆,有序区)从堆顶把根卸出来放在有序区之前,再恢复堆
计数排序数组、链表稳定O(n+m)O(n+m)统计小于等于该元素值的元素的个数i,于是该元素就放在目标数组的索引i位(i>=0)
桶排序数组、链表稳定O(n)O(m)将值为i的元素放入i号桶,最后依次把桶里的元素倒出来
基数排序数组、链表稳定O(k*n)O(n^2)一种多关键字的排序算法,可用桶排序来实现

Java实现冒泡排序
Java实现选择排序
Java实现直接插入排序
Java实现快速排序
Java实现希尔排序
Java实现归并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值