一直有想整理以前學習JAVA的時候的一些所得,拖了很久,雖然晚了點,不過還是遲做總比不做好吧,:-)
折半算法,先對數組進行遞增排序,然後循環和中間的值比較。
下面是示例的代碼(貌似見到有人發的代碼能展和的,不曉得是用什麼做到的):
package com.cqit.edu.test;
import java.util.Scanner;
/**
* @author
* @date 2008-12-8
*
*/
public class MiddleSearch {
/**
* @param args
*/
public static int search() {
System.out.println("請隨意輸入10個數字,並以空格隔開:");
Scanner scanner = new Scanner(System.in);
int low = 0;
int mid;
int names[] = new int[10];
// String str1 = scanner.next();
for (int i = 0; i < names.length; i++) {
names[i] = scanner.nextInt();
}
for (int i = 0; i < names.length; i++)
for (int j = i; j < names.length; j++) {
if (names[i] > names[j]) {
int temp;
temp = names[i];
names[i] = names[j];
names[j] = temp;
}
}
System.out.println("經過排序後變成:");
for (int i = 0; i < names.length; i++) {
System.out.print(names[i] + " ");
}
System.out.println();
System.out.println("請輸入你要查找的數字:");
int str2 = scanner.nextInt();
int high = names.length;
while (low <= high) {
mid = (low + high) / 2;
if (str2 == names[mid]) {
System.out.println("你查找的是第:"+(mid+1)+"個數字!");
return mid; // 沒有return mid 的話將死循環,一直輸出mid
} else if (str2 < names[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return 0;
}
public static void main(String[] args) {
search();
}
}