二分查找法和插入排序
原理:在一个是顺序的序列,每次查找都找中间位置的值与之比较,如果中间位置的值比待查数值大,在序列左边继续执行查找过程;如果中间位置的值比待查的值小,在序列右边继续执行查找过程
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;
}