二分查找法和插入排序

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

 

 

 

posted @ 2020-07-25 01:28  神也没办法  阅读(187)  评论(0编辑  收藏  举报