在了解java數組排序功能塊代碼的操作後
下面咱們再來分享下關於給定一個元素,然後在數組中查找元素是否存在,如果存在則輸出對應數組元素下的角標,如果不存在則輸出-1;
上圖所示,在給定的數組裡查找對應元素的角標位置數,上圖是查找存在的元素位置,如過查找的元素不存在數組裡頭編譯會如何?如下圖
當然,返回-1還是提示不存在這裡都是按程序要求來更改,而這裡咱們就力求方便吧直接不存在返回負一
另外,如過查找的數在數組裡頭出現過2次?那麼返回的角標是算第一個還是第二個還是全部顯示?代碼示意圖如下:
綜合上圖例題可以看得出來,java數組中如果出現查找對象2次或多次的,所輸出角標位置均以第一個出現的數為準,如上圖例題,查找46,而第一個46出現在角標為3的位置上,所以輸出3
為了進一步了解排序咱們現在在來了解下折半查找
生活中我們經常會和朋友說,我說一個數你猜下多少,範圍是1-100之間,那怎麼猜呀?
如果我們說小於50 ?
如果我們說小於25?
這是不是折半查找?這是不是可以提高效率?但是前提是什麼?是1-100是有序的對不?
那話題來了,咱們的所謂java數組折半查找來了~~哈哈哈哈~~!~是不是很明了尼?
比如說我要找一個值 這個值是多少?是65!
你們我們是不要先找到最小值0? min=0
然後再找個最大值?max=arr.length-1;(因為折半查找啊都是有序數組查找,所以咱們可以直接定位到最後一位元素數據)
最後咱們在取個中間值 mid=(min + max)/2(最小加最大除以2就是中間值啦)
有些朋友可能會問,如果不能被2整除怎麼辦? 這是不需要擔心的,咱們這個是向下取整滴,比如說,最大角標是5,那麼5鐵定是不能被2整除的嘛,而5/2=2.5,則去角標2
然後咱們從中間角標2開始,然後看下中間角標2是否大於咱們要查找的數?如果大於則中間角標值加1,如果小於則中間角標值減1
以此類推,不管大於或小於,咱們在對剩下的元素數據角標再進行折半,然後在查看大於下於或是等於,如果等於則輸出查找到的值,如果小於或大於,就在對剩下的區間值進行折半查找
從上述說明可以總結出,折半查找的動作是可以重複的 去做滴。然後重複的事情,咱們是可以使用循環的去做滴