package javafirst;import java.util.Arrays;class MaoPao{ //升序排列 /** * @param arr 要排序的数组 * @return int型排序好的升序数组 */ public int[] ascendSort(int[] arr){ for(int i = 0; i < arr.length - 1; i++){ for(int k = 0; k < arr.length - 1 - i; k ++){ if (arr[k] > arr[k+1]){ int temp = arr[k]; arr[k] = arr[k+1]; arr[k+1] = temp; } } } return arr; } //降序排序 /** * @param arr 需要排序的数组 * @return int型降序数组 */ public int[] descendSort(int[] arr){ for(int i = 0; i < arr.length - 1; i++){ for(int k = 0; k < arr.length - 1 - i; k ++){ if (arr[k] < arr[k+1]){ int temp = arr[k]; arr[k] = arr[k+1]; arr[k+1] = temp; } } } return arr; }}class binarySearch{ //二分法查找 /** * @param sortArray 升序排序完的数组 * @param value 要在数组中查找的数字 * @return 返回int型索引值 */ public int aSearch(int[] sortArray , int value){ int low = 0; int high = sortArray.length - 1; while(low <= high){ int middle = (low + high) / 2; if(value > sortArray[middle]){ low = middle + 1; }else if(value < sortArray[middle]){ high = middle - 1; }else{ return middle; } } return -1; } /** * @param sortArray 降序排序完的数组 * @param value 要在数组中查找的数字 * @return 返回int型索引值 */ public int deSearch(int[] sortArray , int value){ int low = 0; int high = sortArray.length - 1; while(low <= high){ int middle = (low + high) / 2; if(value > sortArray[middle]){ high = middle - 1; }else if(value < sortArray[middle]){ low = middle + 1; }else{ return middle; } } return -1; }}public class Test12 { public static void main(String[] args){ int[] arr1 = {10,29,8,7,9,23,29,38,27,25,34,23}; MaoPao mp = new MaoPao(); //调用其升序方法 for (int i : mp.ascendSort(arr1)){ System.out.print(i + " "); } System.out.println(); //调用其降序的方法 for(int i :mp.descendSort(arr1)){ System.out.print(i + " "); } System.out.println(); int[] arr2 = mp.ascendSort(arr1);//排序好的升序数组 binarySearch bs = new binarySearch(); System.out.println(bs.aSearch(arr2, 23));//调用的为升序二分法的查找 //因为数组是降序,所以调用二分法的降序查找方法 System.out.println(bs.deSearch(mp.descendSort(arr1), 27)); } }
输出结果
7 8 9 10 23 23 25 27 29 29 34 38 38 34 29 29 27 25 23 23 10 9 8 7 54