題目
在一個有序的陣列中查找具體的某個數字n,撰寫功能:在v[0]<=v[1]<…<v[n-1]的陣列中查找數字的下標
思路(一)
我們先定義一個有序的陣列arr,再設定陣列中的一個數字k為我們所尋找的值,當數字與演算法結果匹配時,列印“找到了,下標為–”,若該數字在陣列中未查找到,則列印“找不到”,
因為該陣列是有序的,我們可以利用一個回圈結構,當i<sz時,陣列中元素的下標i(每次下標加一),在陣列中進行逐個查找,當k=arr[i]找到該數字,列印“找到了,下標為i”,當i=sz,k仍然未找到相等的arr[i],那么此時陣列中不能查找到該數字,列印“找不到”,
//
在有序的陣列中查找具體的某個數
元素個數 sz =
(陣列空間總大小)sizeof(arr)/(第一個元素大小)sizeof(arr[0])
實作代碼如下:

運行結果如下:

思路(二)
上述演算法并不夠高效,在陣列有序的情況下,找數字可用更高效的方法
//折半查找法或二分查找法
//如果陣列中有n個數字,那么逐個查找最壞將查找n次,當n很大時,計算機運算量將更大,而二分查找法只需查找
//折半查找法 或二分查找法
每次與陣列中間坐標(mid=(left+right)/2)對應的數字比較,每次縮小一半的范圍,
設定陣列左下標left=0,右下標right=sz-1(元素個數-1)
當(left<=right)在回圈里每次將arr[mid]與k進行比較
1.arr[mid]<k
中間元素小于要查找的數,說明要查找的數在中間數的右邊,所以中間數左邊的內容就可以舍棄了,
同時left=mid+1,在新的范圍里繼續查找,
2.arr[mid]>k
中間元素大于要查找的數,說明要查找的數在中間數的左邊,所以中間數右邊的內容就可以舍棄了,
同時right=mid-1,在新的范圍里繼續查找,
3.arr[mid]=k
此時k被找到,mid為其下標.
當(left>right)跳出回圈
在當前陣列中未能查找到該數字k,列印未找到,
實作代碼如下:

實作結果如下:

將代碼封裝成函式形式如下:


注意:一定是在有序的陣列中才可以運用二分查找法
謝謝欣賞! ^ __ ^
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/251762.html
標籤:其他
上一篇:2.匯編求無符號數的平均數
下一篇:洗掉WIN10右鍵解壓縮選單
