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