有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)

一、概述

有序数组中常常用到二分查找,能提高查找的速度。今天,我们用顺序查找和二分查找实现数组的增删改查。

二、有序数组的优缺点

优点:查找速度比无序数组快多了

缺点:插入时要按排序方式把后面的数据进行移动

三、有序数组和无序数组共同优缺点

删除数据时必须把后面的数据向前移动来填补删除项的漏洞

四、代码实现

public class OrderArray {

private int nElemes; //记录数组长度

private long[] a;

/**

* 构造函数里面初始化数组 赋值默认长度

*

* @param max

*/

public OrderArray(int max){

this.a = new long[max];

nElemes = 0;

}

//查找方法 (二分查找)

public int find(long searchElement){

int startIndex = 0;

int endIndex = nElemes-1;

int curIn;

while(true){

curIn = (startIndex + endIndex)/2;

if(a[curIn]==searchElement){

return curIn; //找到

}else if(startIndex>endIndex){ //]有找到

return nElemes; //返回大于最大索引整数

}else{ //还要继续找

if(a[curIn]

startIndex = curIn + 1; //改变最小索引

}else{ //往前找

endIndex = curIn -1;

}

}

}

}

//插入元素(线性查找)

public void insert(long value){

int j;

for(j=0;j

if(a[j]>value){

break;

}

}

for(int k=nElemes;k>j;k--){

a[k] = a[k-1];

}

a[j] = value;

nElemes++;

}

//删除数据项

public boolean delete(long value){

int j = find(value);

if(j==nElemes){

return false; //没找到

}else{

//所有元素往前移动一位

for(int k=j;k

a[k] = a[k+1];

nElemes--;

return true;

}

}

//展示的方法

public void display(){

for(int i=0;i

System.out.print(a[i]+" ");

}

}

public int size(){

return nElemes;

}

}

五、测试

public static void main(String[] args) {

int max = 100;

OrderArray oa = new OrderArray(max);

oa.insert(12);

oa.insert(14);

oa.insert(90);

oa.insert(89);

oa.insert(87);

oa.insert(88);

oa.insert(67);

oa.display();

int searchkey = 90;

if(oa.find(searchkey)!=oa.size()){

System.out.println("found"+searchkey);

}else{

System.out.println("not found");

}

oa.delete(88);

oa.delete(90);

oa.delete(89);

oa.display();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

你可能感兴趣的:(有序数组二分查找java)