数据结构--有序数组和二分查找

查询:采用二分查找
删除的时候需要移动元素,保证数组的有序性
有序数组的优缺点:
优点:查找速度快
缺点:插入的时候需要按照排序方式把后面的数据移动
有序数组和无序数组的共同缺点:删除时数据项的数据向前移动来填补删除项的洞

 

public class OrdArray {

	private long [] a;
	public int element;
	
	public OrdArray(int max){
		a=new long[max];
		element=0;
	}
	
	public int size(){
		return element;
	}
	//二分查找的方法
	
	public int find(long serachkey){
		int lowerbound=0;//初始位置
		int upperbound=element-1;//最后一个的位置
		int curln;//当前位置
		while(true){
			curln=(lowerbound+upperbound)/2;//取到中间位置
			if(a[curln]==serachkey)
				return curln;
			else if (lowerbound>upperbound) //没有找到数据
				return element;//返回大于最大索引整数
			else {//继续查找
				if (a[curln]<serachkey) {//往后面查
					lowerbound=curln+1;//改变最小索引
				}else {//往前面查
					upperbound=curln-1;
				}
			}
		}
	}
	//添加数据项(线性查找)
	
	public void insert(long value){
		int j;
		
		for(j=0;j<element;j++)
			if(a[j]>value)break;
		for(int k=element;k>j;k--)
			a[k]=a[k-1];//数据向前移动
		a[j]=value;
		element++;
	}
	
	//删除数据项
	//先用二分查找到数据然后再删除数据
	
	public boolean delete(long value){
		int j=find(value);
		if (j==element) {
			return false;
		}else{
			for(int k=j;k<element;k++)
				a[k]=a[k+1];
			element--;
			return true;
		}
		
	}
	
	//显示数据项
	
	public void display(){
		int j;
		for(j=0;j<element;j++)
		System.out.print(a[j]+" ");
		System.out.println();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值