/*这个类是关于数组的相关操作,如数组的求最大值,最小值,选择排序 二分法查找等 */ |
public class ArrayTools { |
public int max( int [] array) { |
int max = Integer.MIN_VALUE; |
for ( int i = 0 ; i < array.length; i++) { |
if (array[i] > max) { |
max = array[i]; |
} |
} |
return max; |
} |
public int min( int [] array) { |
int min = Integer.MAX_VALUE; |
for ( int i = 0 ; i < array.length; i++) { |
if (array[i] < min) { |
min = array[i]; |
} |
} |
return min; |
} |
/** |
* 选择排序 |
* |
* @param array |
*/ |
public void selectSort( int [] array) { |
int minIndex; // 最小索引 |
int temp; |
for ( int i = 0 ; i < array.length; i++) { |
minIndex = i; // 假设每轮第一个元素为最小元素 |
// 从假设的最小元素的下一元素开始循环 |
for ( int j = i + 1 ; j < array.length; j++) { |
// 如果发现有比当前array[smallIndex]更小元素,则记下该元素的索引于smallIndex中 |
if ((array[j] < array[minIndex])) { |
minIndex = j; |
} |
} |
// 先前只是记录最小元素索引,当最小元素索引确定后,再与每轮的第一个元素交换 |
temp = array[i]; |
array[i] = array[minIndex]; |
array[minIndex] = temp; |
} |
} |
/** |
* 二分法查找,前提是已排序 |
* |
* @param array |
* @param des |
* @return |
*/ |
public static int binarySearch( int [] array, int des) { |
int low = 0 ; |
int high = array.length - 1 ; |
while (low <= high) { |
int middle = (low + high) / 2 ; |
if (des == array[middle]) { |
return middle; |
} else if (des < array[middle]) { |
high = middle - 1 ; |
} else { |
low = middle + 1 ; |
} |
} |
return - 1 ; |
} |
/** |
* 测试 |
* |
* @param args |
*/ |
public static void main(String[] args) { |
int [] array = { 5 , 9 , 1 , 0 , 4 , 2 , - 6 , 3 , 8 , 0 , 76 , - 7 , 7 , 11 , 12 , 19 , |
8 , 9 , 10 , 28 , 53 }; |
ArrayTools arrayTools = new ArrayTools(); |
System.out.println( "原数组:" ); |
for ( int i = 0 ; i < array.length; i++) { |
System.out.print(array[i] + " " ); |
} |
System.out.println(); |
System.out.println( "选择排序结果:" ); |
arrayTools.selectSort(array); |
for ( int i = 0 ; i < array.length; i++) { |
System.out.print(array[i] + " " ); |
} |
System.out.println(); |
System.out.println( "二分法查找 9 的位置:" + arrayTools.binarySearch(array, 9 )); |
System.out.println( "最大值:" + arrayTools.max(array)); |
System.out.println( "最小值:" + arrayTools.min(array)); |
} |
} |