数组
简单数组的数据模式
数组删除[A1]
面向对象化的数组
有序数组
特点1:二分查找
二分查找流程
[最终结果 lowerBound > upperBound]
二分插入:
使用二分查找方法的思路进行数组元素的添加.
算法步骤
1 没有元素直接插入
2 高位低位准备工作
3 进入while(true)循环,为新数据项确立下标
3.1 计算中间位
3.2 高位小于低位立即退出循环/中间位等于新数据项立即退出循环
3.3 divide range
3.3.1 处理右半边数组—新数据项大于中间位
3.3.1.1处理数组下标边界情况 à符合条件退出循环
3.3.1.2判断中间位+1 是否大于新数据项 à符合条件退出循环
3.3.1.3 低位= 中间位+1 à循环继续
3.3.2 处理左半边数组—新数据项小于中间位
3.3.2.1 处理数组下标边界情况à符合条件退出循环
3.3.2.2 判断中间位-1是否小于新数据项à符合条件退出循环
3.3.2.3 高位 = 中间位-1 à循环继续
4 移动数据,插入新数据项到指定下标位置
二分插入流程
已经向数组插入如下值:
10 20 40 60 80 100 140
再次插入新的数据项 180
低位 中位 高位 下标如下图所示:
当进行到第三步,低中高三位等于最后一个元素的下标时.
循环继续,并执行3.3.1.1 步,然后循环退出.并移动数据项.插入新数据项.
有序数组 VS 无序数组
|
查找 |
插入 |
删除 |
有序 |
慢 – 线性查找 O[N] |
快—O[1] |
慢 – 需要移动数据项 |
无序 |
快 – 二分查找 Log(2)N |
慢 – 需要进行数据空间移动 |
慢 – 需要移动数据项 |
用于储存对象的数组
searchKey = 55;
for(j=0;j<nElems;j++)
if(arr[j]==searchKey) break;
//move higher ones down
for(int k=j;k<nElems;k++)
arr[k] = arr[k+1];
//decrement size
nElems--;0没 8i