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;
}
}
}
}
}