数据结构:二分查找法
代码展示:
package erfenfa;
public class OrdArray {
private long[] a;
private int nElems;
//构造方法 给数组a 和 nElems初始化
public OrdArray(int max) {
// TODO Auto-generated constructor stub
a = new long[max];
nElems = 0;
}
//获取数组中值得个数
public int size(){
return nElems;
}
//查找方法
public int find(long searchKey){
int lowerBound = 0; // 数组的第一个
int upperBound = nElems -1; //数组的最后一个
int curIn; //中间值
while(true){
curIn = (lowerBound + upperBound) /2;
if(a[curIn]==searchKey){
return curIn; //查找成功
}else if(lowerBound>upperBound){
return nElems; //查找失败,返回数组中数据的个数
}else {
if(a[curIn]<searchKey){ // 二分法中的细节代码
lowerBound = curIn+1;
}else{
upperBound = curIn-1;
}
}
}
}
//插入
public void insert(long value){
int j;
for(j=0;j<nElems;j++){
if(a[j]>value){
break;
}
}
for(int i=nElems;i>j;i–){
a[i] = a[i-1];
}
a[j] = value;
nElems++;
}
//删除
public boolean delete(long value){
int key = find(value);//先查找是否存在要删除的数据
if(key==nElems){
return false; //删除数据不存在
}else{
for(int i = key;i<nElems;i++){
a[i]=a[i+1];
}
nElems–;
return true;
}
}
//打印全部
public void display(){
for(int i =0;i<nElems;i++){
System.out.println(a[i]+””);
}
}
}
—————————————-分割线——————————————————
package erfenfa;
public class OrderedApp {
public static void main(String[] args) {
OrdArray ard = new OrdArray(100);
ard.insert(77);
ard.insert(99);
ard.insert(44);
ard.insert(55);
ard.insert(22);
ard.insert(88);
ard.insert(11);
ard.insert(00);
ard.insert(66);
ard.insert(33);
if(ard.find(33)!= ard.size()){
System.out.println(“查找成功”);
}else{
System.out.println(“查找失败”);
}
ard.delete(00);
ard.delete(33);
ard.display();
}
}
转载于:https://www.cnblogs.com/yydeyi/p/4448527.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109477.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...