排序的思想图片

堆排序

堆排序

堆排序需要先建堆后向上/向下调整来升序或者降序。

建小堆/建大堆,选出了最小的/最大的,首尾交换,最小的/最大的放到最后的位置把最后一个数据,不看做堆里面的,向下调整就可以选出次小的/次大的。

无序数组   4,7,1,9,3,6,5,8,3,2,0   

建大堆     0 ,2, 1,3,3,6,5,8,9,7,4

降序:     9,8,7,6, 5, 4,3,3,2,1,0

希尔排序

间隔gap为一组,总共gap组 假设gap==3

插入排序

数组 1 2 3 4 5 6 7 8  插入9 和插入0

hoare排序

让key 在数组左边,设置了数组左边left 和右边right,left往左边走找到比key大,right往右边走 找到比key小,当left 和right找到对应的数字后进行交换,当走到相遇时让key和left right的数字进行交换这个key的位置也发生了改变。

多趟排序就是在原有的基础在进行分割,递归新的left 和right  key

1 左边做key,右边先走;保障了相遇位置的值比key小

2 右边做key,左边先走;保障了相遇位置的值比key大

左边做key,右边先走;保障了相遇位置的值比key小

L和R相遇)无非就是两种情况,L遇R和R遇L

情况一:L遇R,R是停下来,L在走,R先走,R停下来的位置一定比key小相遇的位置就是R停下的位置,就一定比key要小

情况二:R遇L,在相遇这一轮,L就没动,R在移动,跟L相遇,相遇位置就是L的位置,L的位置就是key的位置 or 交换过一些轮次,相遇L位置一定比key小

每次选key都是中位数,效率就很好。数组有序,变成最坏,时间复杂度是O(N^2)

三数取中

头尾中间取不是最小和最大

hoare排序非递归:用到了栈的思想,不是递归但在逻辑上用到了递归

每次从栈里面拿出一段区间单趟分割处理左右子区间入栈

挖洞法的示意图

前后指针法

归并递归思想;整个数组除以2分为2个数组,新的数组再除以2再分出数组,直到变为单个数字再一一进行排序,后面就层层合并,合并成所需数组。

归并非递归

gap是每组的数据个数,11 22 44 归并

归并的时候会越界,处理办法:归并一组拷贝一组也可以整体拷贝。

选择排序 数组 7,89,31,27,93,100,1,3

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值