哈囉,大家好,今天來的有點晚,
今天想跟大家分享陣列的排序與搜尋,雖然這些方法已經沒什麼高手在用了,
但是今天小菜鳥還是翻到了這些陣列的介紹。
首先就讓小菜鳥大致介紹幾種排序法:
**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)+ " 個數字!");
        }
    }


小菜鳥還不清楚這些方法可以應用在哪裡,等我菜味比較沒有的時候,
在來跟大家分享可以在應用哪些地方,謝謝大家,我們明天見。