import java.util.*;
/*
*二分法排序和插入
*/
class Main21
{
public static void main(String[] args)
{
int[] arr={1,34,23,22,27,2};
//select(arr,23);
//insert(arr,34);
Arrays.sort(arr);
binarySearch(arr,22);
}
//插入排序
public static void insert(int[] data,int num){
int left,right;
int middle,j;
for( int i = 1; i < data.length; i++ ) {
// 准备
left = 0;
right = i-1;
num = data[i];
// 二分法查找插入位置
while( right >= left ) {
// 指向已排序好的中间位置
middle = ( left + right ) / 2;
if( num < data[middle] ){
right = middle-1;// 插入的元素在右区间
}
else{
left = middle+1; // 插入的元素在左区间
}
}
// 后移排序码大于R[i]的记录
for( j = i-1; j >= left; j-- ) {
data[j+1] = data[j];
}
// 插入
data[left] = num;
}
for(int z=0;z<data.length;z++){
System.out.print(data[z]+",");
}
}
//查找在哪个位置
public static void select(int[] arr,int m){
int lower=0;//记录第一个元素
int temp=arr.length-1;
int index=-1;
while(lower<=temp){
index = (lower+temp)/2;//记录中间元素,用两边之和除2.
int currentValue=arr[index];
if(currentValue==m){//如果得到的数与要查找的数相等则break退出;
break;
}else if(currentValue<m){//如果得到的数要小于查找的数、就用下标加1;否则减一
lower=index+1;
}else{
temp = index-1;
}
}
if(lower<=temp){
System.out.println(m+"在数组中第:"+(index+1)+"位");
}else{
System.out.println("里面没有这个元素");
}
}
//折半查找算法(前提是数据已经排好序)
public static void binarySearch(int[]a ,int num){
if (a.length == 0) {
System.out.println("里面没有这个元素");
}
int startPosition = 0;
int endPosition = a.length - 1;
int midPosition = (startPosition + endPosition)/2;
while (startPosition <= endPosition) {
if (a[midPosition] == num) {
System.out.println(num+"在数组中第:"+(midPosition+1)+"位");
break;
}
if (a[midPosition] > num ) {
endPosition = midPosition - 1;
}
if (a[midPosition] < num ) {
startPosition = midPosition + 1 ;
}
midPosition = (startPosition + endPosition)/2;
}
}
}