详解Java数据结构和算法(有序数组和二分查找)
一、概述
有序数组中常常用到二分查找,能提高查找的速度。今天,我们用顺序查找和二分查找实现数组的增删改查。
二、有序数组的优缺点
优点:查找速度比无序数组快多了
缺点:插入时要按排序方式把后面的数据进行移动
三、有序数组和无序数组共同优缺点
删除数据时必须把后面的数据向前移动来填补删除项的漏洞
四、代码实现
publicclassOrderArray{ privateintnElemes;//记录数组长度 privatelong[]a; /** *构造函数里面初始化数组赋值默认长度 * *@parammax */ publicOrderArray(intmax){ this.a=newlong[max]; nElemes=0; } //查找方法(二分查找) publicintfind(longsearchElement){ intstartIndex=0; intendIndex=nElemes-1; intcurIn; while(true){ curIn=(startIndex+endIndex)/2; if(a[curIn]==searchElement){ returncurIn;//找到 }elseif(startIndex>endIndex){//沒有找到 returnnElemes;//返回大于最大索引整数 }else{//还要继续找 if(a[curIn]value){ break; } } for(intk=nElemes;k>j;k--){ a[k]=a[k-1]; } a[j]=value; nElemes++; } //删除数据项 publicbooleandelete(longvalue){ intj=find(value); if(j==nElemes){ returnfalse;//没找到 }else{ //所有元素往前移动一位 for(intk=j;k 五、测试
publicstaticvoidmain(String[]args){ intmax=100; OrderArrayoa=newOrderArray(max); oa.insert(12); oa.insert(14); oa.insert(90); oa.insert(89); oa.insert(87); oa.insert(88); oa.insert(67); oa.display(); intsearchkey=90; if(oa.find(searchkey)!=oa.size()){ System.out.println("found"+searchkey); }else{ System.out.println("notfound"); } oa.delete(88); oa.delete(90); oa.delete(89); oa.display(); }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。