现在的位置: 首页 > 综合 > 正文

JavaSE基础复习:ArrayTools工具类

2013年08月01日 ⁄ 综合 ⁄ 共 2186字 ⁄ 字号 评论关闭

  ------- 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培训、期待与您交流! ----------

抱歉!评论已关闭.