1. 二分查找
/*排序并查找 对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找元素 6 并输出排序后的下标。*/ public class Array04 { public static void main(String[] args) { //二分查找的前提是:数组为有序数组,所以我们在二分查找之前,先给数组排序 int[] arr = { 1, 3, 9, 5, 6, 7, 15, 4, 8 }; maoPao(arr); System.out.println("排序结果为:"); printArr(arr); System.out.println("二分查找的下标为:" + binarySearch(arr, 6)); } /** * 这是冒泡排序 * @param arr */ public static void maoPao(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } } /** * 交换两个变量的值 * @param arr * @param x * @param y */ private static void swap(int[] arr, int x, int y) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } /** * 二分查找 * @param arr * @param key * @return */ public static int binarySearch(int[] arr, int key) { //定义三个变量,保存数组的最小,最大和中间索引 int max = arr.length - 1; int min = 0; int mid = 0; //确定中间下标的前提,数组满足折半条件的时候,才能有中间下标 //开始循环折半 while(min<=max) { //计算中间索引 mid=(min+max)/2; if(key>arr[mid]) { min=mid+1; }else if(key<arr[mid]) { max=mid-1; }else{ return mid; } } return -1; } /** * 遍历打印数组 * @param arr */ public static void printArr(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.print(arr[i]); } } System.out.println("]"); } }
2.冒泡排序和选择排序
public class SelectSort { public static void main(String[] args) { int[] arr= {23,12,5,67,9,0,-1}; //selectSort(arr); maoPao(arr); printArr(arr); } /** * 选择排序 * @param arr */ public static void selectSort(int[] arr) { for (int i = 0; i < arr.length; i++) { //每一个元素都要和他后面所有的元素进行比较 for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { swap(arr,i,j); } } } } /** * 冒泡排序:每完成一次排序,就会有一个最大值被找出来放到最后 * @param arr */ public static void maoPao(int[] arr) { for(int i=0;i<arr.length;i++) { //外层循环的次数就是已经排好序的原素个数,不必再将其循环排序 for(int j=0;j<arr.length-i-1;j++) { if(arr[j]>arr[j+1]) { swap(arr,j,j+1); } } } } /** * 交换两个变量的值 * @param arr * @param x * @param y */ private static void swap(int[] arr,int x,int y) { int temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } /** * 遍历打印数组 * @param arr */ public static void printArr(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.print(arr[i]); } } System.out.println("]"); } }