拉格朗日插值查找法

 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     }
View Code

 

猜你喜欢

转载自www.cnblogs.com/takjmh/p/12926636.html