package cn.itcast.day04.demo04;
import java.nio.charset.MalformedInputException;
/**
* 插入排序算法 and 二分查找 算法
*
*
*/
public class DemoInsertionSort {
/**
* 插入排序
* @param arr
*/
public static void insertion(int[] arr){
if(arr.length<2||arr==null){
return;
}
for(int i = 1; i < arr.length; i++) {
for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
public static void main(String[] args) {
int[] test={6,9,5,3,12};
insertion(test);
System.out.println("数组已经排列完成:");
for (int i = 0; i < test.length; i++) {
System.out.print(test[i]+" ");
}
//排好序的数组
int c=choose(test,13,0,test.length-1);
System.out.println();
System.out.println("您查找的数据存在::"+c);
}
/**
* 二分查找
* @param arrs 有序数组
* @param key 目标数值
* @param L 左边 index
* @param R 右边 index
* @return 返回值 查找不到就是 -1
*/
public static int choose(int[] arrs,int key,int L,int R){
while(L<=R){
int minIndex=(L+R)/2;
if(arrs[minIndex]<key){
L=++minIndex;
}else if(arrs[minIndex]>key){
R=--minIndex;
}else {
return minIndex; 返回目标数值的索引
}
}
return -1; 如果未找到目标数值就返回 -1
}
}
/**
* 二分查找(递归方法)
* @param arr 有序数组
* @param key 目标数值
* @param L 左边索引
* @param R 右边索引
* @return 返回值 查找不到返回 -1
*/
public static int engry(int[] arr,int key,int L,int R){
if(L<=R){
int minIndex=(L+R)/2;
if(arr[minIndex]<key){
return engry(arr,key,minIndex+1,R);
}else if(arr[minIndex]>key){
return engry(arr,key,L,minIndex-1);
}else if(arr[minIndex]==key){
return minIndex;
}
}
return -1;
}