定义数组为有序数组模型,并利用二分法进行查找,删除特定值(缺点:只能删除一个值,若有相同的值,则删除第一个)

 
package none001;
//定义数组为有序数组,并利用二分法进行查找,删除(缺点:只能删除一个值,若有相同的值,则删除第一个)
public class OrdApp {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OrdArray oa=new OrdArray(15);
		oa.insert(52);
		oa.insert(16);
		oa.insert(23);
		oa.insert(25);
		oa.insert(12);
		oa.insert(34);
		oa.insert(15);
		oa.insert(35);
		oa.insert(64);
		oa.insert(34);
		oa.display();
		System.out.println("查找指定值序号为:"+oa.find(23));
	 
		System.out.println(oa.delete(34));
		oa.display();
	}

}
class OrdArray{
	private long[] array;
	private int items;
	OrdArray(int max){
		array=new long[max];
		items=0;
	}
	public int length(){
		return items;
	}
	public int find(long searchkey){
		int lowbound=0;
		int highbound=items-1;
		int curin;
		while(true){
			curin=(lowbound+highbound)/2;
			if(array[curin]==searchkey){
				return curin;
			}else if(lowbound>highbound){
				return items;
			}else if(array[curin]<searchkey){
				lowbound=curin+1;
			}else if(array[curin]>searchkey){
				highbound=curin-1;
			}
			
		}
	}
	public void insert(long insertkey){
		 int i;
		 for(i=0;i<items;i++){
			 if(array[i]>=insertkey){
				 break;
			 }
		 }
		 for(int k=items-1;k>=i;k--){
			 array[k+1]=array[k];
		 }
		 array[i]=insertkey;
		 items++;
	}
	public boolean delete(long deletekey){
		int curin=find(deletekey);
		if (0<=curin&&curin<items){
			for(;curin<items;curin++){
				array[curin]=array[curin+1];
			}
			items--;
			System.out.print("删除成功!");
			return true;
		}
		else if(curin==items){
			System.out.println("你要删除的的值不存在。");
			return false;
		}else{
			System.out.println("ERROR!!!");
			return false;
		}
	}
	public void display(){
		for (int i=0;i<items;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值