有序数组与二分查找

Java排序与二分查找实现
本文介绍了一个Java实现的简单排序算法,并演示了如何使用该算法进行元素插入和二分查找。通过实例展示了如何在有限数组中进行有序排列和高效搜索。

//OrderArray.java
public class OrderArray {
private int[] a;

private int nElements;

public OrderArray(int max) {
a = new int[max];
nElements = 0;
}

public void insert(int element) {
if (nElements == a.length) {
System.out.println("can't insert, array is full.");
return;
}
int j;
for (j = 0; j < nElements; j++)
if (a[j] > element)
break;
int k;
for (k = nElements; k > j; k--)
a[k] = a[k - 1];
a[j] = element;
nElements++;
}

/**
* 二分查找元素
*
* @param element
* @return
*/
public int binarySearch(int element) {
int lowerBound = 0;
int upperBound = nElements - 1;
int binaryBound;
while (true) {
binaryBound = (lowerBound + upperBound) / 2;
if (a[binaryBound] == element) // 找到了
return binaryBound;
else if (lowerBound > upperBound) // 404
return -1;
else if (a[binaryBound] > element)
upperBound = binaryBound - 1;// 二分搜索区间
else
lowerBound = binaryBound + 1;// 二分搜索区间
}
}

public boolean delete(int element) {
int j = binarySearch(element);
if (j == -1)
return false;
int k;
for (k = j; k < nElements - 1; k++)
a[k] = a[k + 1];
a[nElements - 1] = 0;
nElements--;
return true;
}

public void display() {
StringBuffer sb = new StringBuffer();
sb.append("[");
int j;
for (j = 0; j < a.length; j++) {
sb.append(a[j] + ",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
System.out.println(sb.toString());
}
}


//Main.java
public class Main {
public static void main(String[] args){
OrderArray orderArray = new OrderArray(10);
orderArray.insert(111);
orderArray.insert(888);
orderArray.insert(333);
orderArray.insert(222);
orderArray.insert(666);
orderArray.insert(555);
orderArray.insert(444);
orderArray.insert(999);
orderArray.insert(777);
orderArray.insert(1111);
orderArray.insert(2222);
orderArray.display();
System.out.println(orderArray.binarySearch(88));
System.out.println(orderArray.binarySearch(1000));
System.out.println(orderArray.delete(333));
System.out.println(orderArray.binarySearch(999));
System.out.println(orderArray.delete(555));
orderArray.insert(555);
orderArray.insert(555);
orderArray.display();
}
}

输出结果:

can't insert, array is full.
[111,222,333,444,555,666,777,888,999,1111]
-1
-1
true
7
true
[111,222,444,555,555,666,777,888,999,1111]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值