1 //while拉格朗日插值查找 2 public static int whileFind(int findNum,int ... arr) { 3 //假定最大值 4 int max = arr.length - 1; 5 //假定最小值 6 int min = 0; 7 int mid = 0; 8 //记录次数 9 int conut = 0; 10 while (true) { 11 //记录一次 12 conut++; 13 14 //拉格朗日插值查找 15 //精华所在, 16 mid = (int) (min + (max + min) * 1.0 * (findNum - arr[min] )/ (arr[max] - arr[min])); 17 18 if (findNum > arr[mid]) { 19 min = mid + 1; 20 } 21 if (findNum < arr[mid]) { 22 min = mid - 1; 23 } else break; 24 } 25 26 System.out.println(conut + "次数!"); 27 return mid; 28 } 29 30 //do while拉格朗日插值查找 31 public static int doWhileFind(int findNum,int ... arr){ 32 33 //假定最大值 34 int max=arr.length-1; 35 //假定最小值 36 int min=0; 37 int mid=0; 38 //记录次数 39 int conut=0; 40 do { 41 conut++; 42 43 mid=(int)(min+(max-min)*1.0*(findNum-arr[min])/(arr[max]-arr[min])); 44 if (findNum>arr[mid]) min=mid+1; 45 if (findNum<arr[mid]) min=mid-1; 46 else break; 47 }while (min<max); 48 49 System.out.println(conut+"次数"); 50 return arr[mid]; 51 } 52 53 //for循环拉格朗日插值查找 54 public static int forFind1(int findNum,int ... arr){ 55 56 int max=arr.length-1; 57 int min=0; 58 int mid=0; 59 int conut=0; 60 61 for (int i = 0; i < arr.length; i++) { 62 conut++; 63 mid=(int)(min+(max-min)*1.0*(findNum-arr[min])/(arr[max]-arr[min])); 64 if (findNum>arr[mid]) min=mid+1; 65 if (findNum<arr[mid]) min=mid-1; 66 else break; 67 } 68 69 System.out.println(conut+"次数"); 70 return arr[mid]; 71 } 72 73 //增强for循环拉格朗日插值查找 74 public static int forFind2(int findNum,int ... arr){ 75 int max=arr.length-1; 76 int min=0; 77 int mid=0; 78 int count=0; 79 for (int i : arr) { 80 count++; 81 mid=(int)(min+(max-min)*1.0*(findNum-arr[min])/(arr[max]-arr[min])); 82 if (findNum>arr[mid]) min=mid+1; 83 if (findNum<arr[mid]) min=mid-1; 84 else break; 85 } 86 87 System.out.println(count+"次数"); 88 return arr[mid]; 89 }