数组-二分查找

package a_array.A_TwoPointsSearch;


/**
 * 二分查找,增删。 优点:查询速度比无序数组快 缺点:删除慢,因为数据项必须向前移动来填补已删除数据项的洞 增加慢,需要移动大于增加数所对用索引后面的所有值
 * 
 * @author Administrator
 *
 */
/**
 * @author Administrator
 * 
 */
public class OrdArray {
private int aElemes;// 数组的数目
private long[] a;


public OrdArray(int max) {
a = new long[max];
aElemes = 0;
}


/**
* 返回大小
*/
public int size() {
return aElemes;
}


/**
* 根据值查询是否存在于数组

* @param searchKey
* @return
*/
public int find(long searchKey) {
int lowerBound = 0;
int upperBound = aElemes - 1;
int index;
while (true) {
index = (lowerBound + upperBound) / 2;
if (a[index] == searchKey) {
return index;
} else if (lowerBound > upperBound) {
return aElemes;
} else {
if (a[index] > searchKey) {
upperBound = index - 1;
} else {
lowerBound = index + 1;
}
}// end else divide range
}// end while
}// end find


/**
* 插入数据

* @param i
*/
public void insert(int i) {
int index;
for (index = 0; index < aElemes; index++) {
if (a[index] > i) {
break;
}
}


for (int k = aElemes; k > index; k--) {
a[k] = a[k - 1];
}
a[index] = i;
aElemes++;
}


/**
* 删除数据
*/
public boolean delete(long value) {
int index = find(value);
if (index == aElemes) {
return false;
} else {
for (int k = index; k < aElemes; k++) {
a[k] = a[k + 1];
}
aElemes--;
return true;
}


}


/**
* displays array contents 显示数数组内容
*/
public void display() {
for (int i = 0; i < aElemes; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}


/**
* 返回最大关键字

* @return
*/
public long getMex() {
return aElemes > 0 ? a[aElemes - 1] : -1;
}


/**
* 删除最大关键字

* @return
*/
public long removeMax() {
return aElemes > 0 ? a[--aElemes] : -1;


}


/**
* 更改排序方式
*/
public void reverseOrder() {
long temp;
for (int i = 0; i < aElemes / 2; i++) {
temp = a[i];
a[i] = a[aElemes - 1 - i];
a[aElemes - 1 - i] = temp;
}
}
}package a_array.A_TwoPointsSearch;


/**
 * twoPointSearch
 * 
 * @author Administrator
 *
 */
public class OrderApp {
public static void main(String[] args) {
OrdArray theArr = new OrdArray(20);
theArr.insert(10);
theArr.insert(30);
theArr.insert(22);
theArr.insert(75);
theArr.insert(34);
theArr.insert(57);
theArr.insert(89);
theArr.insert(49);
theArr.insert(31);
theArr.insert(1);


int searchKey = theArr.find(49);
if (searchKey == theArr.size()) {
System.out.println("没找到");
} else
System.out.println("找到" + searchKey);


theArr.display();
theArr.delete(89);
theArr.display();


theArr.reverseOrder();
theArr.display();


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值