5、順序表查詢:順序查詢與折半查詢
阿新 • • 發佈:2022-12-08
1、順序查詢
按照順序一個一個比較,查詢需要的值。
程式碼實現:
時間複雜度:T(n) = O(n)
空間複雜度:S(n) = O(1)
static int findKey(int[] arr,int obj){ for(int i = 0;i< arr.length;i++){ if(arr[i]==obj) return i; } return -1; }
2、折半查詢
前提:
1、必須是順序表儲存結構。
2、被查詢的表必須按關鍵字大小有序排列。
程式碼實現(非遞迴):
時間複雜度: T(n) = O( log2
空間複雜度: S(n) = O(1)
static int find2(int[] arr,int i){ //首 int head = 0; //尾 int tail = arr.length-1; //中 int mid = (head+tail)/2; //折半查詢 while (head<=tail){ if(arr[mid]==i){ //找到了 return mid; }elseif(arr[mid]>i){//中間值大於要查詢的值,則尾部前移 tail = mid -1; mid = (head+tail)/2; }else if(arr[mid]<i){//中間值小於要查詢的值,則頭部後移 head = mid +1; mid = (head+tail)/2; } } return -1; }
程式碼實現(使用遞迴):
時間複雜度:T(n) = O( log2
空間複雜度:S(n) = O( log2n )
public static int find3(int[] arr, int value){ return find3(arr,value,0,arr.length-1); } private static int find3(int[] arr, int value, int head, int tail){ int mid = (head+tail)/2; if(head<=tail) { if (arr[mid] == value) { //找到了 return mid; } else if (arr[mid] > value) {//中間值大於要查詢的值,則尾部前移 return find3(arr, value, head, mid - 1); } else if (arr[mid] < value) {//中間值小於要查詢的值,則頭部後移 return find3(arr, value, mid + 1, tail); } } return -1; }