iT邦幫忙

DAY 8
0

Java 學習筆記系列 第 8

Java 學習筆記 [8] 排序與搜尋

  • 分享至 

  • xImage
  •  

哈囉,大家好,今天來的有點晚,

今天想跟大家分享陣列的排序與搜尋,雖然這些方法已經沒什麼高手在用了,

但是今天小菜鳥還是翻到了這些陣列的介紹。

首先就讓小菜鳥大致介紹幾種排序法:

**1.**氣泡排序法

**2.**循序搜尋法

**3.**二分搜尋法

氣泡排序法

其中就屬氣泡排序法是算比較簡單易懂的方法,

氣泡排序法就像把每個陣列元素當作空盒子,將兩個相鄰的數字、資料做比較,

在依照排序的條件交換位置。

循序搜尋法

通常我們排序資料就是要把資料排出大小順序之外,另外就是要為了更有效率的搜尋資料,

搜尋的方法有很多種方法,循序搜尋法是比較簡單的方法,

因為循序搜尋的做法是由第一筆資料往後搜尋,一直找到資料為止,

或者把資料蒐尋完...算是比較堅持的方法拉XD。

二分搜尋法

二分這個方法就稍微比較特別一點點,因為必須要先將資料、陣列進行排序,

二分搜尋法的效率就是會比循序搜尋法好,

如果有N筆資料進行二分搜尋法,平均會做Log2N+1次。

以上文謅謅的說明講完了,接下來就來看看小菜鳥今天演練的程式碼吧!

今天演練的程式碼是使用泡沫排序法來進行從小到大的排序,

在使用二分搜尋法來搜尋輸入的數字的位置。

public class JavaApplication8 {
    public static void main(String[] args) {
       int[] aNum = { 23, 100, 58, 11, 67, 12, 44, 101, 75 };
		System.out.print(" 排序前:");
		for (int i = 0; i < aNum.length; i++)
			System.out.print("  " + aNum[i]);
		System.out.println();
		int n = aNum.length;
		int t;
		for (int i = n - 2; i >= 0; i--) { 
			for (int j = 0; j <= i; j++) {
				if (aNum[j] > aNum[j + 1]) {
					t = aNum[j];
					aNum[j] = aNum[j + 1];
					aNum[j + 1] = t;
				}
			}
		}
		System.out.print(" 排序後:");
		for (int i = 0; i < aNum.length; i++)
			System.out.print("  " + aNum[i]);
		System.out.println();
		Scanner scn = new Scanner(System.in);
		System.out.print(" 請輸入要搜尋的數字: ");
		int sNum = scn.nextInt();
		int num = -1, low = 0, high = aNum.length - 1, midNum = 0;
		do {
			midNum = (low + high) / 2;
			if (aNum[midNum] == sNum) {
				num = midNum;
				break;
			}
			if (aNum[midNum] > sNum)
				high = midNum - 1;
			else
				low = midNum + 1;
		} while (low <= high);
		if (num == -1)
			System.out.println(" 沒有 " + sNum + " 這個數字! ");
		else
			System.out.println(" 排序後找到 " + sNum + " 是第 " + (num + 1)+ " 個數字!");
        }
    }

小菜鳥還不清楚這些方法可以應用在哪裡,等我菜味比較沒有的時候,

在來跟大家分享可以在應用哪些地方,謝謝大家,我們明天見。


上一篇
Java 學習筆記 [7] 陣列 2
下一篇
Java 學習筆記 [9] 方法
系列文
Java 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言