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();

}

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值