易懂的7种排序算法解析和理解


    找最值
每次确定一个最值位置,找最值,就是一个全局遍历过程,
交换找最大值,中间可能有序
对比找最大值,必须全部找出
交换找最大值,保留中间状态

bubble        对比交换,遍历0-i可以确定第i+1位置,最值
            1,最外层循环是从len-1-->1,i是要确定最值需要的下标
            2,二层是0-->i,相邻交换,确定i+1是最值
            3,二层无交换,有序可退出
            相邻交换不会相等交换,稳定
            
select        通过对比找出最值,填位置
            1,最外层循环0-->n-1是准备要填的位置i,
            2,二层是i+1-->n-1找出比i更小的下标min
            3,min有比i更小,交换填i
            跨越交换,破坏相邻相等,不稳定
            
heap        对比找出最值,但是结构保留了部分对比结果,父子大小关系
            1,建堆,从第一个非叶子节点开始调整,一直到根节点。(选择排序保留对比结果)
               每次调整都会以当前根节点开始,遍历最大子节点,一直调整到叶子节点
               时间复杂度k=log(n),k为堆的层数
            2,根节点交换出来
            3,调整堆顶
            跨越交换不稳定


    找位置
insert        根据值在已有序列找自己位置
            1,准备插入的数据,1-->len-1
            2,向前比较,i-1-->0,大于后移,直到空出位置
            3,填空位置
            后面来了一个特别小的元素,需要全部移动,那么排序的效率特别低
            
shell        插入的找到空位置条件是基本有序,进行预处理,对后面排序是有很大效果的
            优点是如果在数组最后加入一个小元素,他会被很快移到最前面
            1,tap = len/2,tap /= 2
            2,准备插入的数据,tap-->len-1
            3,向前比较,tap间隔,大于后移,直到空出位置
            4,填空位置


merge        合并并不耗时,时间为O(n),每个小段复杂度减少,2T[n/2],分治到1个数据
            需要空间合并,减少时间
            1,二分打散到两个组,直到1个数据,有序
            2,两个有序组合,left-->mid,mid+1-->right,取值排序到一个新的空间
            3,排序赋值到原数组
            
quick        找任一个数据,找到其对应位置,并且以此分界,存储了部分对比结果
            1,left-->right,确定第一个数据的pivot
            2,right--,left++,直到相等,left < right 执行交换
                (从右开始,相等会是小于,最后交换值会是小于)
            3,left=right=pivot和第一个数据交换
            3,以pivot为界,left-->pivot-1,pivot+1-->right,递归
            
            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值