【蓝桥笔记】基础查找和排序

1.折半查找

low mid high指针
mid可能和low指向同一个单元
mid=(low+high)/2 向下取整

lowhigh

也有可能三个都指向同一个单元
| |
|–|-
| low mid high |
要找的key == high中
关键点
1.

lowhigh
此时low==mid

2.key==high时

low / midhigh
low=mid+1
mid=(low+high)/2
此时low , high , mid 处于同一格

3.退出的条件
由于可以 low=high=mid(查找的最后一次)
所以找不到(退出)的条件是 low>high
找到到的条件是(low<=high) / while(low<=high){ }

2.冒泡排序

原理图:在这里插入图片描述
a[i] 控制比较的 轮数
(一个数不用比较,两个数比较一次,三个数比较两次……)
i最大为 数组长度-1
(i=1;i<数组长度;i++)
a[j]是实际参与比较的数

j 从0开始
a[j]和a[j+1]比较,如果大于则交换

每一轮中,j都从0开始
每一轮当中,都把最大的数放到了最后

所以最末尾的数是确定的,后面的轮次中不用和已经排好序的来比较
每一轮确定一个数,轮次是i
所以不确定的数是 数组长度 - i

所以(j=0 ; j < 数组长度-i ; j++)

3.选择排序

每次(从第i次开始)从数组中未排序的部分找到一个最小的,来和第i个位置的数交换
i 从0开始

4.插入排序

向后挪:在已经有空档(a[i+1] 数可以被直接抹去 )情况下
a[i+1]=a[i] , a[i]=a[i-1] , a[i-1]=a[i-2] …… 依次下去
就是挪动

依次遍历,未排序的部分中的每一个 a[i]
将每一个都插入到已排序的部分

已排序部分(需要存在1个数) j
未排序部分,从1号下标开始 i

j=i-1
将目前正在操作的数保存下来,从已排序部分a [j] 的最后一个开始向前比较 j–

如果不符合条件,向后挪动,
挪动过程中的空档用 正在操作的数temp 填充一下
(挪动–插入)
每一步都插入
也可以在最后再插入

5.希尔排序

分组,组内使用插入排序
由步长确定分组,一开始为 a.length /2
然后每次都是: 前一次 /2
分组方法:确定一个interval 组中每一个都是前一个+interval
int interval=a.length/2;interval>0;interval=interval/2

组内 插入排序
for(){
while(){ }
}

6.递归

将问题拆成很小的每一步
最小可以拆成什么样

递归的 最后一步 和 它的前一步
用非递归表示出他们的关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值