zoukankan      html  css  js  c++  java
  • 二分法查找

     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);

    二次输出:

  • 相关阅读:
    自实现的DNetStopWatch类
    IL Discovery 系列三 《为什么在遍历List<T>对象时同时删除其中项会抛出异常》
    高效的线程安全队列ConcurrentQueue<T>(上)
    .NET中Object.Equals()方法与Object.ReferenceEquals()方法
    麻省理工学院(MIT)的开放课程(OCW)真的不错,其音像资料
    Eclipse快捷键大全
    MyEclipse快捷键大全
    c#单文件上传下载源代码
    Tomcat 配置集锦
    asp.net(C#)多文件上传(源代码)vs2008
  • 原文地址:https://www.cnblogs.com/yg6405816/p/5491411.html
Copyright © 2011-2022 走看看