折半查找算法示例

一直有想整理以前學習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();

 }

}

發佈了26 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章