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.
}
}