码迷,mamicode.com
首页 > 其他好文 > 详细

二分法查找

时间:2016-05-13 23:21:36      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 1 Random r=new Random();//定义一个新的随机数
 2         int[] array=new int[10];//定义一个新的数组,规定数组的长度
 3         
 4         for(int i=0;i<array.length;i++)//数组运行的范围
 5         {
 6             //产生随机数
 7             array[i]=r.nextInt(100);//将产生的随机数放到数组中
 8         }
 9         //遍历输出数组
10         System.out.println("数组的原始顺序:");//
11         for(int i:array)//遍历:for(集合的数据类型:变量名)
12         {
13             System.out.print(i+"  ");
14         }
15         System.out.println();
16         //2、冒泡排序
17         //格式化代码:Ctrl+shift+f
18         System.out.println("排序后的顺序");
19         //总的循环次数少一
20         //数组按照索引一步一步的走,每走一步,就拿这个索引上的值和前面的数作比较,遇到比他小的数就交换到在前面
21         for(int k=0;k<array.length-1;k++)
22         {
23             //优化代码:每次冒泡是的循环次数比上一次少1
24             for (int i = 0; i < array.length - 1-k; i++) 
25             {
26                 // 从小到大排序
27                 if (array[i] > array[i+1]) 
28                 {
29                     // 调换
30                     int t = array[i];//强t值赋给array[i]
31                     array[i] = array[i+1];//array[i]再将里面的值给array[i+1]
32                     array[i+1] = t;
33                 }
34             }
35             //System.out.println("数组第"+(k+1)+"次排序的顺序:");
36             for (int i : array) 
37             {
38                 System.out.print(i + "  ");
39             }
40             System.out.println();
41         }
42         //3、二分查找
43         //1)计算出数组的中间位置:(开始位置索引+结束位置索引)/2
44         //2)取出中间位置的值和要查找的数字比较,根据比较结果决定下一步要查找的部分
45         //3)计算出下一部分数组的中间位置:(开始位置索引+结束位置索引)/2
46         //要查找的值
47         int chazhao=10;
48         //找到的位置
49         int zhaodaodeweizhi=-1;//-1代表没找到
50         //开始索引
51         int start=0;
52         //结束索引
53         int end=array.length-1;
54         //
55         while(start<=end)
56         {
57             int zhongjian = (start + end) / 2;//中间索引=(开始索引+结束索引)/2
58             //若查找的数正好等于中间数
59             if (chazhao == array[zhongjian]) 
60             {
61                 //则所找到的数=中间数
62                 zhaodaodeweizhi = zhongjian;// 找到了
63                 break;//找到后直接跳出循环
64             } 
65             //所查找的数的索引>中间数,则说明所查找的数在中间偏后的位置
66             else if (chazhao > array[zhongjian]) 
67             {
68                 //则所输出的开始数=中间数+1
69                 start = zhongjian + 1;
70             } 
71             else //反之,所查找的数的索引<中间数,则说明所查找的数在中间靠前的位置
72             {
73                 //所输出结尾数=中间数-1
74                 end = zhongjian - 1;
75             }
76         }
77             System.out.println("找到的位置为:"+zhaodaodeweizhi);

 

 

技术分享

二次输出:

技术分享

二分法查找

标签:

原文地址:http://www.cnblogs.com/yg6405816/p/5491411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!