常用排序算法

常用排序算法特点

选择排序

  1. 运行时间与元素输入顺序无关
  2. 元素移动次数最少
  3. 需要 N 2 / 2 N^2/2 N2/2次比较和 N N N次交换

插入排序

  1. 运行时间与元素插入顺序相关
  2. 平均运行情况: N 2 / 4 N^2/4 N2/4次比较+ N 2 / 4 N^2/4 N2/4次交换
  3. 最坏运行情况: N 2 / 2 N^2/2 N2/2次比较+ N 2 / 2 N^2/2 N2/2次交换
  4. 最好运行情况: N − 1 N-1 N1次比较+ 0 0 0次交换

希尔排序

  1. 基于插入排序的快速排序算法
  2. 希尔排序比插入和选择排序要快,且数组越大,三者差距越大
  3. 不需要使用额外的内存空间

归并排序

  1. 保证排序所需时间与 N lg ⁡ N N\lg N NlgN成正比
  2. 缺点为所需额外空间与 N N N成正比

注意:根据分治算法的思想,归并排序可以改进为自顶向下的归并排序,此时有

  1. 需要 1 2 N lg ⁡ N \frac{1}{2}N\lg N 21NlgN N lg ⁡ N N\lg N NlgN次比较
  2. 最多需要访问所有元素共 6 N lg ⁡ N 6N\lg N 6NlgN

此外,也可改进为自底向上的归并排序,同理有

  1. 需要 1 2 N lg ⁡ N \frac{1}{2}N\lg N 21NlgN N lg ⁡ N N\lg N NlgN次比较
  2. 最多需要访问所有元素共 6 N lg ⁡ N 6N\lg N 6NlgN

快速排序

  1. 排序效率取决于切分数组的效果
  2. 一般比归并排序和希尔排序快
  3. 为了避免切分不平衡导致排序算法低效,应在排序前将数组随机排序

在快速排序中,为了应对含有大量重复元素的排序需求时,应使用三向切分的快速排序方法进行排序,此时可以将排序时间从线性对数级降低到线性级别

相关算法的java代码示例详见

点我跳转

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值