二分法查找和普通查找
一、普通查找
? 對于數(shù)組和一個需要查找的元素來說,普通查找的原理很簡單,即為從數(shù)組的第一個元素到最后一個元素進行遍歷,如果第i個元素的值等于我們需要查找的值,那么返回找到的角標(biāo)i,否則返回-1表示沒有查找到。這里以java為例,普通查找代碼如下:
1 package Daily_practice; 2 3 public class Array_Search { 4 5 public static void main(String[] args) { 6 int[] arr1 = {33,19,15,28,106,45,78,13}; 7 //普通查找 8 int index1 = getIndex(arr1,28); 9 System.out.println(index1); 10 } 11 //普通查找,返回值所在的角標(biāo),不存在返回-1 12 public static int getIndex(int[] arr,int value) 13 //value為需要查找的值 14 { 15 for(int i=0;i<arr.length;i++) 16 { 17 if(arr[i] == value) 18 return i; 19 } 20 return -1; 21 } 22 }二、二分法查找
? 二分法是從中間元素開始查找,假設(shè)整型數(shù)組為arr,要查找的元素為value,數(shù)組中間元素為arr[mid],若value小于arr[mid],則在左半邊繼續(xù)查找;若value大于arr[mid],則在右半邊繼續(xù)查找,如此循環(huán),知道value等于arr[mid],返回的角標(biāo)mid即為要找的元素的位置。java代碼如下:
1 package Daily_practice; 2 3 public class Array_Search1 { 4 5 public static void main(String[] args) { 6 int[] arr2 = {13,15,19,28,33,45,78,106}; 7 //二分法查找 8 int index2 = halfSearch(arr2,28); 9 System.out.println(index2); 10 } 11 12 //二分法查找 13 public static int halfSearch(int[] arr,int value) 14 { 15 int min,mid,max; 16 min = 0; 17 max = arr.length-1; 18 mid = (min+max)/2; 19 while(arr[mid] != value) 20 { 21 if(value > arr[mid]) 22 min = mid + 1; 23 else 24 max = mid - 1; 25 if(max < min) 26 return -1; 27 mid = (min+max)/2; 28 } 29 return mid; 30 } 31 32 }三、二分法查找和普通查找的優(yōu)缺點分析
???普通查找
? 優(yōu)點:1)原理簡單,代碼容易實現(xiàn)
? ? ? ? 2)不需要數(shù)組有序
? 缺點:1)當(dāng)元素個數(shù)很多時,效率較低
?
? ?二分法查找
? 優(yōu)點:1)效率比普通查找高
? 缺點:1)要求數(shù)組必須是有序排列
四、總結(jié)
? 兩種方法各有優(yōu)點和局限,至于具體用哪一種請讀者根據(jù)實際情況而定,文中若有不恰當(dāng)之處請批評指正!
轉(zhuǎn)載于:https://www.cnblogs.com/yaoHongBo/p/7456630.html
總結(jié)
以上是生活随笔為你收集整理的二分法查找和普通查找的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么光大信用卡心e金还进去没额度了?怎
- 下一篇: if _name_ == _main