一、普通查找
? 對于數組和一個需要查找的元素來說,普通查找的原理很簡單,即為從數組的第一個元素到最后一個元素進行遍歷,如果第i個元素的值等于我們需要查找的值,那么返回找到的角標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 //普通查找,返回值所在的角標,不存在返回-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 }
二、二分法查找
? 二分法是從中間元素開始查找,假設整型數組為arr,要查找的元素為value,數組中間元素為arr[mid],若value小于arr[mid],則在左半邊繼續查找;若value大于arr[mid],則在右半邊繼續查找,如此循環,知道value等于arr[mid],返回的角標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 }
三、二分法查找和普通查找的優缺點分析
???普通查找
? 優點:1)原理簡單,代碼容易實現
? ? ? ? 2)不需要數組有序
? 缺點:1)當元素個數很多時,效率較低
?
? ?二分法查找
? 優點:1)效率比普通查找高
? 缺點:1)要求數組必須是有序排列
四、總結
? 兩種方法各有優點和局限,至于具體用哪一種請讀者根據實際情況而定,文中若有不恰當之處請批評指正!