折半查找:必須是在有序的表中進(jìn)行。這是重要的一點(diǎn)。這折半查找提高了效率。
1.待查找數(shù)據(jù)值比中間元素值小,則以整個(gè)查找范圍的前半部分作為新的查找范圍。
2.待查找數(shù)據(jù)值比中間元素值大,則以整個(gè)查找范圍的后半部分作為新的查找范圍。
一種是實(shí)現(xiàn)的角標(biāo);一種是直接實(shí)現(xiàn)的數(shù)值。
//折半查找就是找到,必須是有序的列表。public class halfsearch {public static void mian(String args[]){int[]arry={1,10,51,3,4,5};int jg=halfSearch(arry, 2);System.out.PRint(jg);}//折半查找第一種方法 public static int halfSearch(int[] arry,int key){ int min=0; //最大的角表; int max=arry.length-1; int mid; while(max>min){ mid=(min+max)/2; if(key>mid){ min=mid+1; } else if(key<mid) { max=mid=1; }else //返回的是角標(biāo) return mid; } //不再范圍內(nèi)的時(shí)候就是越界反悔-1return -1; }//第二種方法 public static int halfSearch_2(int[] arry,int key){ int min=0; int max=arry.length-1; int mid=(min+max)/2; //比較的是中間的值和要找的值進(jìn)行比較 while(key!=arry[mid]){ if(key>arry[mid]){ min=mid+1; }else if(key<arry[mid]){ max=mid-1; } //如果最大的值和最小的值重合以后返回-1 else if(min>max){ return -1; } mid=(min+max)/2; } return mid; }}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注