排序算法思想

本文总结目前我接触的几种排序算法,不设计具体的代码,只是写下我理解的它们在做什么

1.排序思想

(1)选择排序

每次通过逐一比较,找出一个最值

(2)冒泡排序

每次通过相邻元素的逐一比较,沉底一个最大元素,或者冒泡一个最小元素。

(3)插入排序

每次通过比较维护一个已排好序的子序列,当这个子序列长度与原序列相等时就排好序了。

(4)归并排序

merge是核心,merge通过移动下标将两个已经排好序的序列排序。

而可以通过不断递归,将序列长度降为1,这样就有若干已排好序的数组,然后对它们不断merge即可。

(5)快速排序

partition是核心。partition可以通过将个元素与某一元素比较,将数组分为两边,从而找到该元素位置。

然后对两边的未排序子序列递归partition即可。当所有元素都找到自己的位置,排序完成。

(6)堆排序

用堆来维护序列,每次都能通过sink或者swim找到最值元素,这样不断对排除了最值元素的子序列递归调用,便能排序。

2.思考

(1)选择排序与堆排序的区别

找到最值元素的复杂度不一样

选择排序逐一比较,找到最值元素复杂度为N次比较,1次交换。

堆排序是最多logN次比较,与logN次交换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值