package com.zfsoft.monday;
import java.util.Arrays;
public class Array {
Arrays autil ;
static int[] a = {3,5,2,6,7,4,5};
static int[] b = {11,55,88,33};
static int [] c;
public static void main(String[] args) {
Array arr = new Array();
//排序
arr.sort(a);
//没有通过排序的数组进行二分搜索
for(int serachObject:a){
arr.arraySearch(a, serachObject);
}
//通过排序后的数组进行二分搜索
arr.sort(a);
for(int serachObject:a){
arr.arraySearch(a, 4);
}
//数组拷贝
arr.copyArray(a,0,b,0,b.length);
//数组填充
arr.Fill(b, 0, b.length, 888);
}
/**
* 数组的拷贝
* 当源数组和拷贝数组的长度不一致时,应取最短的长度,否则会数组越界
*/
public void copyArray(int[] copyArray, int copyStartIndex ,int[] Array,int stratIndex,int length){
System.arraycopy(copyArray, copyStartIndex, Array, stratIndex, length);
System.out.println(autil.toString(b));
}
/**
* jdk6中 的新方法
*/
//返回复制后的新数组
//public static int[] copyOf(int[] original,int newLength);
//根据起点索引,和终点索引,复制相应的值到新数组
//public static int[] copyOfRange(int[] original,int from,int to);
/**
* 填充数组
* 填充数组的最后一个值的索引不包含在替换内,例子:如果截止索引为1,那么只填充array[0]位置上值,不填充array[1]
* @param array
* @param startIndex
* @param endIndex
* @param val
*/
public void Fill(int[] array,int startIndex,int endIndex,int val){
autil.fill(array, startIndex,endIndex,val);
System.out.println(autil.toString(array));
}
/**
* 采用冒泡排序法对数组进行排序
* @param array
*/
public void sort(int[] array){
System.out.println("排序前"+autil.toString(array));
autil.sort(array);
System.out.println("排序后"+autil.toString(array));
}
/**
* 采用二分搜索法,
* 此方法查询前,必须对数组进行排序。
* @param a
* @param key
* @return
*/
public void arraySearch(int[] array,int object){
//排序
autil.sort(array);
System.out.println(Array.binarySearch(array, object));
}
/**
* 二分搜索的源代码
* @param a
* @param key
* @return
*/
public static int binarySearch(int[] a, int key) {
int low = 0;
int high = a.length-1;
while (low <= high) {
int mid = (low + high) >> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
}