問題:定義一個函數,接收一個數組與一個要查找的元素,如果該元素存在數組中,那么返回該元素在數組中的索引值,如果不存在返回-1。package com.blackhorse.practise;public class Demo7 { public static void main(String[] args) { // TODO 自動生成的方法存根 int[] s = {2,4,6,5,7,9,8}; int t =getNum(s,6);? ? ? ? ?System.out.println(t); }? ? public static ?int getNum(int[] b,int a){? ? for(int i=0;i<b.length;i++){? ? if(a ==b[i]){? ? return i;? ? }else if(a!=b[i]){? ? return -1;? ? }? ? } return 0;//程序不對,未完成? ? ? ? }}程序不完善,不太會寫了,求大神幫助(希望高手能附上第二種寫法,還能用二分查找,在此萬分感謝?。?
1 回答
已采納
_瀟瀟暮雨
TA貢獻646條經驗 獲得超225個贊
/**
?*?查找工具類,實現簡單的查找、二分查找
?*/
public?class?FindUtil?{
/**
?*?構造器私有化
?*/
private?FindUtil()?{
}
/**
?*?普通查找
?*?@param?arr數組
?*?@param?key需要查找的關鍵字
?*?@return
?*/
public?static?int?search(int?arr[],?int?key)?{
if?(arr?==?null?||?arr.length?==?0)?{
return?-1;
}
for?(int?i?=?0;?i?<?arr.length;?i++)?{
if?(key?==?arr[i])
return?i;
}
return?-1;
}
/**
?*?二分查找的非遞歸實現?特別注意,以下算法只能針對一個升序排列的數組
?*/
public?static?int?binarySearch(int[]?arr,?int?key)?{
if?(arr?==?null?||?arr.length?==?0){?
return?-1;
}
int?minIndex?=?0,?maxIndex?=?arr.length?-?1,?midIndex;
while?(minIndex?<=?maxIndex)?{
midIndex?=?(minIndex?+?maxIndex)?>>?1;? //?右移一位相當于除以2
if?(key?==?arr[midIndex])
return?midIndex;
if?(key?<?arr[midIndex])
maxIndex?=?midIndex?-?1;
if?(key?>?arr[midIndex])
minIndex?=?midIndex?+?1;
}
return?-1;
}
/**
?*?二分查找的遞歸實現---實際上是一種分治算法
?*?
?*?@param?arr數組
?*?@param?midIndex最低位置
?*?@param?maxIndex最高位置
?*?@param?key需要查找的值
?*?@return元素的位置
?*/
public?static?int?binarySearch(int[]?arr,?int?minIndex,?int?maxIndex,int?key)?{
if?(arr?==?null?||?arr.length?==?0)?
return?-1;
if?(minIndex?<=?maxIndex)?{
int?midIndex?=?(minIndex?+?maxIndex)?/?2;
if?(key?==?arr[midIndex])
return?midIndex;
else?if?(key?<?arr[midIndex])
return?binarySearch(arr,?minIndex,?midIndex?-?1,?key);
else
return?binarySearch(arr,?midIndex?+?1,?maxIndex,?key);
}?else?{
return?-1;
}
}
}添加回答
舉報
0/150
提交
取消
