package none001; //定义数组为有序数组,并利用二分法进行查找,删除(缺点:只能删除一个值,若有相同的值,则删除第一个) public class OrdApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub OrdArray oa=new OrdArray(15); oa.insert(52); oa.insert(16); oa.insert(23); oa.insert(25); oa.insert(12); oa.insert(34); oa.insert(15); oa.insert(35); oa.insert(64); oa.insert(34); oa.display(); System.out.println("查找指定值序号为:"+oa.find(23)); System.out.println(oa.delete(34)); oa.display(); } } class OrdArray{ private long[] array; private int items; OrdArray(int max){ array=new long[max]; items=0; } public int length(){ return items; } public int find(long searchkey){ int lowbound=0; int highbound=items-1; int curin; while(true){ curin=(lowbound+highbound)/2; if(array[curin]==searchkey){ return curin; }else if(lowbound>highbound){ return items; }else if(array[curin]<searchkey){ lowbound=curin+1; }else if(array[curin]>searchkey){ highbound=curin-1; } } } public void insert(long insertkey){ int i; for(i=0;i<items;i++){ if(array[i]>=insertkey){ break; } } for(int k=items-1;k>=i;k--){ array[k+1]=array[k]; } array[i]=insertkey; items++; } public boolean delete(long deletekey){ int curin=find(deletekey); if (0<=curin&&curin<items){ for(;curin<items;curin++){ array[curin]=array[curin+1]; } items--; System.out.print("删除成功!"); return true; } else if(curin==items){ System.out.println("你要删除的的值不存在。"); return false; }else{ System.out.println("ERROR!!!"); return false; } } public void display(){ for (int i=0;i<items;i++){ System.out.print(array[i]+" "); } System.out.println(); } }
定义数组为有序数组模型,并利用二分法进行查找,删除特定值(缺点:只能删除一个值,若有相同的值,则删除第一个)
最新推荐文章于 2023-04-13 16:01:26 发布