package com.study.algorithm; import java.util.Scanner; public class BinarySearch { public static void main(String[] args) { /* System.out.println("請輸入排序數組:"); int array[] = new int[10]; Scanner sc = new Scanner(System.in); for (int i = 0; i < array.length; i++) { array[i] = sc.nextInt(); }*/ int[] array = new int[]{25, 84, 455, 885, 4459, 6215, 244, 443, 4457, 1440}; int a = BinarySearch(array, 10); System.out.println("數字下標是:" + a); } /** * 二分法查找 * * @param array int数组 * @param item 要查找的数字 * @return 如果找到返回对应的下标, 下标从1开始。否则返回0 */ private static int BinarySearch(int[] array, int item) { //arrayays.sort(arrayay); //BubbleSort(array); //quickSort(array,0,array.length-1); doarrayertSort(array); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } int low = 0; int high = array.length - 1; while (low <= high) { int mid = (low + high) / 2; if (item == array[mid]) { return mid; } else if (item < array[mid]) { high = mid - 1; } else { low = mid + 1; } } return 0; } /** * 選擇排序 * * @param arrayay */ private static void sort(int[] arrayay) { for (int i = 0; i < arrayay.length; i++) { for (int j = i + 1; j < arrayay.length; j++) { if (arrayay[i] > arrayay[j]) { int temp = arrayay[i]; arrayay[i] = arrayay[j]; arrayay[j] = temp; } } } } /** * 冒泡排序 * * @param array */ private static void BubbleSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { //每次比较都会确定一个最小数,所以j < array.length-1-i if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } /** * 快速排序 * * @param arr */ private static void quickSort(int[] arr,int low,int high) { // int low = 0; // int high = arr.length - 1; if(low>high){ return; } int i, j, temp, t; i = low; j = high; //temp就是基准位 temp = arr[low]; while (i < j) { //先看右边,依次往左递减 while (temp <= arr[j] && i < j) { j--; } //再看左边,依次往右递增 while (temp >= arr[i] && i < j) { i++; } //如果满足条件则交换 if (i < j) { t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } //最后将基准为与i和j相等位置的数字交换 arr[low] = arr[i]; arr[i] = temp; //递归调用左半数组 quickSort(arr, low, j - 1); //递归调用右半数组 quickSort(arr, j + 1, high); } /** * 插入排序 * @param array */ private static void doarrayertSort(int[] array){ for(int i=1; i<array.length; i++){ for(int j=i; j>0; j--){ if(array[j]<array[j-1]){ int temp = array[j-1]; array[j-1] = array[j]; array[j] = temp; } } } } }