使用顺序查找适用于没有顺序的数据序列,执行速度效率为:O(N)。
public class ArrayOrderSearch {
private long[] data;
private int num;
public ArrayOrderSearch(int length){
num = 0 ;
data = new long[length];
}
public boolean serach(long searchKey){
for(int i=0;i<num;i++){
if(searchKey==data[i]){
return true;
}
}
return false;
}
public void insert(long key){
data[num] = key;
num++;
}
public boolean delete(long key){
int i;
for(i=0;i<num;i++){
if(key==data[i]){
break;
}
}
if(i == num){
return false;
}else{
for(int j=i;j<num;j++){
data[j] = data[j+1];
}
num--;
return true;
}
}
public void display(){
for(int i=0;i<num;i++){
System.out.print(data[i]+",");
}
}
public static void main(String[] args) {
int length = 50;
ArrayOrderSearch aos = new ArrayOrderSearch(length);
aos.insert(20);
aos.insert(30);
aos.insert(10);
aos.insert(80);
aos.insert(50);
aos.insert(60);
aos.display();
System.out.println("");
long searchKey = 80;
if(true==aos.serach(searchKey)){
System.out.println("找到:"+searchKey);
}else{
System.out.println("没有找到");
}
System.out.println("");
aos.delete(searchKey);
if(true==aos.serach(searchKey)){
System.out.println("找到:"+searchKey);
}else{
System.out.println("没有找到");
}
System.out.println("");
aos.delete(10);
aos.delete(20);
aos.display();
}
}
执行结果为:
20,30,10,80,50,60,
找到:80
没有找到
30,50,60,
二分查找适用于已经排好序的数据序列,执行效率为(logN)。
package date20171009;
public class ArrayBinarySearch {
private long[] data;
private int num;
public ArrayBinarySearch(int length){
num = 0 ;
data = new long[length];
}
public int getsize(){
return num;
}
public long serach(long searchKey){
int lowerBound = 0;
int upperBound = num-1;
int curValue=0;
while(true){
if(data[curValue]==searchKey){
return curValue;
}
else if(lowerBound>=upperBound){
return num;
}
else{
curValue = (lowerBound+upperBound)/2;
if(searchKey>data[curValue]){
lowerBound = curValue + 1;
}else{
upperBound = curValue - 1;
}
}
}
}
public void insert(long key){
data[num] = key;
num++;
}
public boolean delete(long key){
int i;
for(i=0;i<num;i++){
if(key==data[i]){
break;
}
}
if(i == num){
return false;
}else{
for(int j=i;j<num;j++){
data[j] = data[j+1];
}
num--;
return true;
}
}
public void display(){
for(int i=0;i<num;i++){
System.out.print(data[i]+",");
}
}
public static void main(String[] args) {
int length = 50;
ArrayBinarySearch abs = new ArrayBinarySearch(length);
abs.insert(10);
abs.insert(20);
abs.insert(30);
abs.insert(40);
abs.insert(50);
abs.insert(60);
abs.insert(70);
abs.insert(80);
abs.insert(90);
abs.display();
System.out.println("");
long searchKey = 80;
if(abs.getsize()>abs.serach(searchKey)){
System.out.println("找到:"+searchKey);
}else{
System.out.println("没有找到");
}
System.out.println("");
abs.delete(searchKey);
System.out.println(abs.getsize());
System.out.println(abs.serach(searchKey));
if(abs.getsize()>abs.serach(searchKey)){
System.out.println(123);
System.out.println("找到:"+searchKey);
}else{
System.out.println("没有找到");
}
System.out.println("");
abs.delete(10);
abs.delete(20);
abs.display();
}
}
执行结果为:
10,20,30,40,50,60,70,80,90,
找到:80
8
8
没有找到
30,40,50,60,70,90,