/**
* 二分法 :用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据。
*
* 基本思想:
*
* 首先将待查数据k与排好序(递增有序)的一组数据的中间位置上的数据进行比较, 若相等,则查找成功;
* 若k>a[mid],则待查数据k只可能出现在右半部a[mid+1…n]中,则应在这个右半部中再进行折半查找;
* 若k<a[mid],则待查数据k只可能出现在左半部a[1…mid-1]中,则应在这个左半部中再进行折半查找;
* 这样通过逐步缩小查找范围,直到找到或找不到该数据k为止。
*
* @author Administrator
*
*/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 |
package
com.my.test;import java.util.Arrays;public class CTest { public
static void main(String[] ss) { int[] a = { 3, 4, 2, 8, 6, 0, 7, 5, 9, 1
}; System.out.println("原 数 组: "
+ Arrays.toString(a)); Arrays.sort(a); System.out.println("集合排序: "
+ Arrays.toString(a)); // 冒泡排序 for
(int i = 0; i < a.length - 1; i++) { for
(int j = 0; j < a.length - 1
- i; j++) { int
tmp = 0; if
(a[j] > a[j + 1]) { tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } System.out.println("冒泡排序: "
+ Arrays.toString(a)); // 测试二分法查找 int[] b = { 1, 3, 5, 7, 9, 12, 13, 15
}; System.out.println(BinarySearch(b, 9)); } /** * * @Title: 二分法查找 * @Description: TODO * @param a * @param key * @return int */ public
static boolean BinarySearch(int[] Data, int
KeyValue) { int
Left = 0; // 左边界变量 int
Right = 0; // 右边界变量 int
Middle; // 中位数变量 while
(Left <= Right) { Middle = (Left + Right) / 2; if
(KeyValue < Data[Middle]) // 查找值比中间值小 { Right = Middle - 1; // 查找前半段 } else
if (KeyValue > Data[Middle])// 查找值比中间值大 { Left = Middle + 1; // 查找后半段 } else
if (KeyValue == Data[Middle]) // 查找到数据 { System.out.println("Data["
+ Middle + "] = "
+ Data[Middle]); return
true; } } return
false; }} |
用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序(例子),布布扣,bubuko.com
用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序(例子)
原文:http://www.cnblogs.com/qqzy168/p/3613540.html