数组

简单数组的数据模式

 

数组删除[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

慢 – 需要进行数据空间移动

慢 – 需要移动数据项

 用于储存对象的数组

 

 


 [A1]

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

 

posted @ 2013-07-03 08:15  王超_cc  阅读(270)  评论(0编辑  收藏  举报