您的位置:首页 > 编程语言 > Java开发

JavaSE基础复习:ArrayTools工具类

2012-12-02 10:51 218 查看
  ------- android培训java培训、期待与您交流! ----------

/*
数组工具类:	java.util.Arrays
方法:
print(arr) 打印数组;
selectSort_1(arr)	选择排序1
selectSort_2(arr)	选择排序2
bubbleSort(arr)	冒泡排序
reverse(arr)	数组倒置
getIndex(arr,key)	查找key在arr中的角标
binarySearch(arr,key)	arr为升序数组,二分法查找key,返回角标,如果不存在,返回值为key在数组中的位置
max(arr)	获取最大值
min(arr)	获取最小值
*/
public class ArrayTools {
public static void main(String[] args) {
int[] arr = {5,2,7,21,12,44,1};
print(arr);
selectSort_2(arr);
print(arr);
reverse(arr);
print(arr);
selectSort_1(arr);
print(arr);
reverse(arr);
print(arr);
bubbleSort(arr);
print(arr);
System.out.println(getIndex(arr,4) + "	二分法结果	" + binarySearch(arr,4) + "	max=" + max(arr) + "	min=" + min(arr));

//本二分法查找只能查找升序数组

}

//---打印数组
public static void print(int[] arr) {
System.out.print("[");
for(int i=0; i<arr.length; i++) {
if(i!=arr.length-1)
System.out.print(arr[i] + ",");
else
System.out.println(arr[i] + "]");
}
}

/*
选择法排序,升序
*/
public static void selectSort_1(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=i+1; j<arr.length; j++) {
if(arr[i]>arr[j])
swap(arr,i,j);
}
}
}

public static void selectSort_2(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
int min = i;
for(int j=i+1; j<arr.length; j++) {
if(arr[min]>arr[j])
min = j;
}
if(i!=min)
swap(arr,i,min);
}
}

/*
冒泡法排序,升序
*/
public static void bubbleSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=0; j<arr.length-i-1; j++) {
if(arr[j] > arr[j+1])
swap(arr,j,j+1);
}
}
}

//---两个位置交换
private static void swap(int[] arr, int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}

//---数组最大值
public static int max(int[] arr) {
int index = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i]>arr[index])
index = i;
}
return arr[index];
}

//---数组最小值
public static int min(int[] arr) {
int index = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i]<arr[index])
index = i;
}
return arr[index];
}

//---二分法查找,数组arr为升序数组,如果存在key,则返回key在数组中的位置,否则返回-1
public static int binarySearch(int[] arr, int key) {
int min=0, mid, max=arr.length-1;
while(min<=max) {
mid = (min+max)>>1;
if(key > arr[mid])
min = mid +1;
else if(key < arr[mid])
max = mid - 1;
else
return mid;
}
return -min-1;	//---如果需要得到key要插入的位置,因为min就是要插入的位置,可以返回-min-1,-1是为了和0角标区别开。
}

//---普通查找,获取key第一次出现的位置
public static int getIndex(int[] arr, int key) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] == key)
return i;
}
return -1;
}

//---数组倒置
public static void reverse(int[] arr) {
for(int i=0,j=arr.length-1; i<j; i++,j--) {
swap(arr,i,j);
}
}
}
------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息