冒泡排序 二分查找法(JAVA)算法
1.二分查找又称折半查找,它是一种效率较高的查找方法。
2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列
3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。
4.实现:二分查找的实现用递归和循环两种方式
package javaTest;
/**
* 二分查找法
首先将无序数组排序成按照小到大排序
* @author JackChen
*
*/
public class MaoPaoAndErFen {
public static void main(String[] args) {
int[] arrs = {2,8,6,3,9,12,24,10,5,60,40,38,99,26};
//冒泡排序方法按照从小到大 如果从大到小就将arrs[j]<arrs[j+1]
for (int i = 0; i < arrs.length-1; i++) {
for (int j = 0; j < arrs.length-1; j++) {
if(arrs[j]>arrs[j+1]){//如果前一个大于后面的 就替换下位置
int num = arrs[j+1];
arrs[j+1] = arrs[j];
arrs[j] = num;
}
}
}
for (int i : arrs) {
System.out.println(i);
}
System.out.println(erFenWhile(arrs, 24)); //循环二分查找
System.out.println(erFenDiGui(arrs, 24, 0, arrs.length-1));//循环二分查找发递归方法
}
/**
* 循环二分查找发
* @param arrs
* @param value
* @return
*/
public static int erFenWhile(int[] arrs,int value){
int min = 0;
int max = arrs.length-1;
while(min<=max){
int middle = (min+max)/2;
if(arrs[middle]>value){//如果数组循环>查找值 最大值 = 中间值-1
max = middle - 1;
}else if(arrs[middle]<value){//如果集合<查找值 最大值 = 中间值+1
min = middle+1;
}else{
return middle;
}
}
return -1;
}
/**
* 递归二分查找法
* @param arr
* @param value
* @param min
* @param max
* @return
*/
public static int erFenDiGui(int[] arr,int value,int min,int max){
if(min>max || arr[max]<value || arr[min]>value){
return -1;
}
int middle = (min+max)/2;
if(arr[middle]>value){//数组中间值>查找值 返回下次方法 最大值 = 中间-1
return erFenDiGui(arr, value, min, middle-1);
}else if(arr[middle]<value){//数组中间值<查找值 返回下次方法 最小值= 中间+1
return erFenDiGui(arr, value, middle+1, max);
}else{
return middle;
}
}
}执行完输出两个8是数组的下标