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