zoukankan      html  css  js  c++  java
  • 二分查找法和插入排序

    day6

    二分查找法

     

    原理:在一个是顺序的序列,每次查找都找中间位置的值与之比较,如果中间位置的值比待查数值大,在序列左边继续执行查找过程;如果中间位置的值比待查的值小,在序列右边继续执行查找过程

    public static int binarySearch(int[] arrray,int a){
       int low = 0;
       int high = array.length -1;//数组下标从0计数,下标比真实数量少1
       int mid;
       while(low <= high){
           mid = (low + high) / 2;
           if(a == array[mid]){
              return mid;
          }
          else if(a > array[mid]){//向右查找
              low = mid + 1; //+1是排除了array[mid]
          }
       else{    //向左查找
           high = mid - 1;
      }
       return -1; //说明数组中没有查找的数
       
    }

     

    插入排序

    将一个数据插入一个已经拍好序的序列中。

    数组从下标为0的元素开始排序。

    public static int[] insertionSort(int[] array){
       for(int i =1;i<array.length;i++){//从下标为1开始比较,首元素相当于在一个新的数组中,一个元素是有序的
           int index = i-1;
           int inserVal = array[i];
           while(index>=0 && inserVal <array[index] ){//待插入的数据比被插入的数小(我也不知道为什么要判断index是否大于0)
               arrary[index+1] = array[index];//将array[index]向后移一位
               index--
            }
           array[index+1] = inserVal;//待插入的数据大于被插入的数,array[index]位置不变,inserVal就需要向后移动;
      }
       return array;
    }

     

     

     

  • 相关阅读:
    LOJ10092半连通子图
    LOJ104 普通平衡树
    LOJ10145郁闷的出纳员
    LOJ10144宠物收养所
    LOJ10043
    洛谷P3850 书架
    codevs 1814 最长链
    洛谷 P2022 有趣的数
    codevs 1312 连续自然数和
    noip 2010 引水入城
  • 原文地址:https://www.cnblogs.com/stydejava/p/13375325.html
Copyright © 2011-2022 走看看