1 /**
2 * @the author:Nicky(EN) QuQiang(CH)
3 * @the data :2006.8.27
4 **/
5 // 当然本算法最好编制æˆä¸¤åˆ°3个文ä»?/span>
6
7 public class HalfSearch{
8 private static int lengthValue;
9 private static byte flag=0;
10 private static int SearchValue=0;
11
12 //定义˜q”回数组¾cÕdž‹çš„æ–¹æ³?nbsp; æ¤æ–¹æ³•给出的publicæƒé™
13 public static int[] Sort(int[] b){
14 for(int i=0;i<b.length;i++){
15 for(int j=i+1;j<b.length;j++){
16 int temp;
17 if(b[i]>b[j]){
18 temp=b[i];b[i]=b[j];b[j]=temp;
19 }
20 }
21 }
22 System.out.println("\u6309\u5e8f\u6392\u5217\u4e3a:"); //对应汉å—ä¸?nbsp; æŒ‰åºæŽ’åˆ—ä¸?
23 for(int i=0;i<b.length;i++){
24 System.out.println(b[i]);
25 } //冒æˆöæŽ’åºæ³•排åº?nbsp; 或直接ä‹É用JåQ¤ï˜Oæä¾›çš„sort()函数˜q›è¡ŒæŽ’列
26 return b;
27 }
28
29 //æŠ˜åŠæŸ¥æ‰¾
30 private static int Half(int[] a){
31 int m=a.length,k,n=1;
32 System.out.println("\u5f53\u524d\u5171\u8f93\u5165"+m+"\u4e2a\u6570\u7b26"); //对应汉å—ä¸?nbsp; "当å‰å…Þp¾“å…? 个数½W?/span>
33 int index=0;
34 if(m==1){
35 if(a[0]==SearchValue){
36 flag=1;
37 index=1;
38 }
39 else{
40 flag=0;
41 index=1;
42 }
43 } //考虑到用户除输入查找数符外,åªè¾“入一个数½W¦ï¼Œå³n=m=1
44 for(int i=1;;i++){
45 if(n<m){
46 index+=1;
47 k=(n+m)/2;
48 if(a[k-1]>SearchValue){
49 m=k-1; //æ¤æ—¶å®šä¹‰æœ€å¤§å€égØ“(f¨´)当å‰ä¸é—´å€¼çš„å‰ä¸€ä¸ªå€?nbsp; //½W?nbsp;‹Æ¡æŸ¥æ‰¾æœªæˆåŠŸåQŒå½“å‰å€¼å¤§äºŽSearchValue
50 System.out.println("\u7b2c"+index+"\u6b21\u67e5\u627e\u672a\u6210\u529f\uff0c \u5f53\u524d\u503c\u5927\u4e8e"+SearchValue);//å¦åˆ™ž®?æ”¹äØ“(f¨´)å˜é‡
51 }else if(a[k-1]<SearchValue){
52 n=k+1; //未找刎ͼŒåˆ™åœ¨åŽåŠåŒºé—´˜q›è¡ŒæŸ¥æ‰¾ //ž®äºŽ
53 System.out.println("\u7b2c"+index+"\u6b21\u67e5\u627e\u672a\u6210\u529f\uff0c \u5f53\u524d\u503c\u5c0f\u4e8e"+SearchValue);//å¦åˆ™ž®?æ”¹äØ“(f¨´)å˜é‡
54 }else{
55 System.out.println("\u67e5\u627e\u6210\u529f"); //查找æˆåŠŸ
56 flag=1;
57 break;
58 }
59 }else break;
60 }
61 return index;
62 } //也å¯ä»¥å®šä¹‰ä¸€ä¸ªç”¨æˆ·éœ€è¾“入的查扑ր?br>63
64 //使用说明
65 private static void usage(){
66 System.out.println("Usage:java HalfSearch program [the number you search] [the array list you give]");
67 System.out.println("\t [the number you search] the only number you want to use it to test this program");
68 System.out.println("\t [the Array list you give] A array list may be it contains it may be not");
69 System.exit(0);
70 }
71
72 //ä¸Õd‡½æ•°çš„功能 ä¼ å…¥æŸ¥æ‰¾æ•°ç»„
73 public static void main(String[] args){
74 if(args.length==0||args.length==1){
75 usage();
76 System.exit(0);
77 }
78 SearchValue=Integer.parseInt(args[0]);
79 lengthValue=args.length;
80 int index=0;
81 int[] TransArray=new int[args.length-1];
82 for(int i=1;i<args.length;i++){
83 TransArray[i-1]=Integer.parseInt(args[i]);
84 System.out.println(TransArray[i-1]);
85 }
86 index=HalfSearch.Half(HalfSearch.Sort(TransArray));
87 //输出查询¾l“æžœ
88 switch(flag){
89 //在本‹Æ¡æŠ˜åŠæŸ¥æ‰¾ä¸å…Þq»˜q?nbsp; ‹Æ¡æŸ¥æ‰?未æˆåŠ?nbsp; æˆåŠŸ
90 case 0: System.out.println("\u5728\u672c\u6b21\u6298\u534a\u67e5\u627e\u4e2d\u5171\u7ecf\u8fc7"+index+"\u6b21\u67e5\u627e,\u672a\u6210\u529f");break;
91 case 1: System.out.println("\u5728\u672c\u6b21\u6298\u534a\u67e5\u627e\u4e2d\u5171\u7ecf\u8fc7"+index+"\u6b21\u67e5\u627e,\u6210\u529f");break;
92 }
93 System.exit(0);
94 }
95 }

]]>