(三)

作者: jpc123 | 来源:发表于2019-03-08 00:34 被阅读0次

在有序的有N个元素的数组中查找用户输进去的数据x。

二分法查找
算法如下:
1.确定查找范围front=0,end=N-1,计算中项mid=(front+end)/2。
2.若a[mid]=x或front>=end,则结束查找;否则,向下继续。
3.若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算mid,转去执行步骤2;若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,转去执行步骤2。
算法复杂度分析编辑
时间复杂度
1.最坏情况查找最后一个元素(或者第一个元素)Master定理T(n)=T(n/2)+O(1)所以T(n)=O(log2n)
2.最好情况查找中间元素O(1)查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)
空间复杂度
S(n)=n
public class Algorithm {
      public static void main(String[] args){
            int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            int value = binary2(a,4);
            System.out.println(value);
        }
      static int time = 0;
      public static int binary(int[] array, int value) {
          int postion = -1;
          if(array == null) {
              return postion;
          }
          int start = 0;
          int end = array.length-1;
          int middle = (end -start)/2;
          
          while(start<=end) {
              time++;
              if(value == array[middle]) {
                  postion = middle;
                  System.out.println("第"+time+"此查找,找到 postion "+ postion);
                  break;
              }else if(value <array[middle]) {
                  end = middle-1;
                  middle = (end -start)/2;
                  System.out.println("第"+time+"此查找,在左边 middle "+ middle);
              }else {
                  start = middle+1;
                  middle = start +(end -start)/2;
                  System.out.println("第"+time+"此查找,在右边 middle "+ middle);
              }
          }
          return postion;
      }
      
      public static int binary2(int[] array, int value) {
          int postion = -1;
          if(array == null) {
              return postion;
          }
          int start = 0;
          int end = array.length-1;
          while(start<=end) {
              time++;
              int middle = (end +start)/2;
              if(value == array[middle]) {
                  postion = middle;
                  System.out.println("第"+time+"此查找,找到 postion "+ postion);
                  break;
              }else if(value <array[middle]) {
                  end = middle-1;
                  System.out.println("第"+time+"此查找,在左边 middle "+ middle);
              }else {
                  start = middle+1;
                  System.out.println("第"+time+"此查找,在右边 middle "+ middle);
              }
          }
          return postion;
      }
}

相关文章

  • 三.三

    越来越多的年轻孩子们开始写字,说自己的生活,欲望和野心。大概两年的日子,是一边默默消化符合这个时代的速成文学,一边...

  • 36/70 二三三三三三三

    上周看的电影叫做《羞羞的铁拳》,女主马丽,男主艾伦,开心麻花出品。想不起来是从什么时候开始关注麻花作品的。应该是从...

  • 三棍儿(三)

    再说强子,跟着老黄上完了三年初小,虽然再也没有捧奖状回来,成绩算还不错。上完了三年级就要去镇上的高小去上四...

  • 三A三Q

    1.请写出参加这次交流对自己触动最大,感受最深的内容。 我觉得在这次讲座期间我思考了很多,我觉得这些观念给了我很大...

  • 三少(三)

    我一听心中一凛,就见祥子眯缝着看着我,却是不再说话。突然感觉背后冷飕飕的,像是一股阴风吹来,我整个人都像要炸了开来...

  • 三妹妹(三)

    我们虽一母同胞,却在不同的环境中长大,有着迥然不同的价值观。 最早的一次冲突,我们都很隐忍,彼此...

  • 三就是三

    三就是三,哪有什么后来者居上,连那个三妻四妾的时代都知道“聘为妻,奔为妾”,但凡有点教养,ta的骄傲的不允许ta插...

  • 三婶(三)

    为病魔所胁迫,徘徊在这个世界边缘,一直坐在病床上背对别人低着头的三婶,寡言少语,却从未放弃过任何一丝生存的希望,积...

  • 山三(三)

    某天晩上,蝉鸣声更欢了,空气似乎停滞或者被人类抽光,进入“真空地带”,近乎窒息,没有一丝流动。太阳已经完全落山了,...

  • “三”对“三”

    “三”——彼得三次不认主。 “三”——耶稣三问彼得:“你爱我吗?” 耶稣复活后,第三次向门徒显现。耶稣出现时,他们...

网友评论

      本文标题:(三)

      本文链接:https://www.haomeiwen.com/subject/fttlpqtx.html