一、有序数组下二分查找的find的方法
import java.util.Random;
class OrdApp{
private long[] a;
private int nElems;
public OrdApp(int Max) {
a = new long[Max];
nElems = 0;
}
//返回数组当前的数据项的个数
public int size () {
return nElems;
}
//二分查找的find()方法
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 k=nElems;k>j;k--)
a[k]=a[k-1];
a[j]=value;
nElems++;
}
public boolean delete(long value){
int j;
for(j=0;j<nElems;j++)
if(value==a[j])
break;
if(j==nElems)
return false;
else {
for (int k=j;k<nElems;k++)
a[k]=a[k+1];
nElems--;
return true;
}
}
public void display(){
for(int j=0;j<nElems;j++)
System.out.println(a[j]+" ");
System.out.println("");
}
}
public class OrderArray {
public static void main(String[] args) {
int maxSize = 100;
OrdApp arr;
Random r = new Random();
arr = new OrdApp(maxSize);
int i;
for (i = 0; i < 10; i++) {
int temp = r.nextInt(18);
arr.insert(temp);
}
arr.display();
int searchKey = r.nextInt(18);
System.out.println("需要查找的数是::" + searchKey);
if (arr.find(searchKey) != arr.size())
System.out.println("Find " + searchKey);
else
System.out.println("can't Find " + searchKey);
arr.delete(12);
arr.delete(55);
arr.display();
}
}
二、存储对象,即所要存储的对象是多个元素的集合,用数组肯定不合适。所以用一个类来定义最后只需调用即可
public class Person {
private String lastName;
private String firstName;
private int age;
public Person(String last,String first,int a){
lastName=last;
firstName=first;
age=a;
}
public void displayPerson(){
System.out.println(" Last name:"+lastName);
System.out.println(" first name:"+firstName);
System.out.println(",Age:"+age);
}
public String getLast(){
return lastName;
}
}
class ClassDataArray{
private Person[] a;
private int nElems;
public ClassDataArray(int max){
a=new Person[max];
nElems=0;
}
public Person find(String searchName){
int j;
for(j=0;j<nElems;j++)
if(a[j].getLast().equals(searchName))
break;
if(j==nElems)
return null;
else return a[j];
}
public void insert(String last,String first,int age){
a[nElems]=new Person(last, first,age);
nElems++;
}
public boolean delete(String searchName){
int j;
for(j=0;j<nElems;j++)
if(a[j].getLast().equals(searchName))
break;
if(j=nElems)
return false;
else
{
for(int k=j;k<nElems;k++)
a[k]=a[k+1];
nElems--;
return true;
}
}
public void display(){
for(int j=0;j<nElems;j++)
a[j].displayPerson();
}
}
//主类
public class ClassDataAPP {
public static void main(String[] args){
int maxSize=100;
ClassDataArray arr;
arr=new ClassDataArray(maxSize);
arr.insert("smiteer","hsjsh",32);
arr.insert("smieere","hshhdjsh",45);
arr.insert("smitee","hsdjdjsh",78);
arr.insert("smitere","jsh",45);
arr.insert("ere","hsdjshdjsh",36);
arr.insert("seere","hsjshhdjsh",12);
arr.insert("smite","djsh",12);
arr.insert("smte","jshhdjsh",52);
arr.insert("se","hsh",25);
arr.insert("smie","hhdjh",56);
arr.display();
String sarchKey="smie";
Person found;
found=arr.find(sarchKey);
if(found!=null){
System.out.println("Found");
found.displayPerson();
}
else
System.out.println("can't find the "+sarchKey);
System.out.println("delete the smie");
arr.delete("smie");
arr.display();
}
}