氣泡排序、選擇排序、二分查詢、插入排序
阿新 • • 發佈:2018-11-02
氣泡排序、選擇排序、二分查詢、插入排序
氣泡排序
氣泡排序的思想就是兩兩比較,按從小到大輸出的話,兩個值相比,較小的放前大的放後,那麼第一次兩兩比較結束後,最大值放在末尾,接下來再繼續兩兩比較,但是這一次不需要比較到最後,因為最後已經是最大值了,所以每次兩兩比較結束後,都會少比一次,然後以此類推,直到陣列中按從大到小排列。程式碼演示
class Demo { public static void main(String[] args) { int[] a={22,11,4,33,5}; //外迴圈是一共進行幾輪比較的次數 for(int i=0;i<a.length;i++){ //內迴圈是兩兩比較一輪的次數,每一次兩兩比完後最大值都會放最後,因此都會少比一次 for(int j=0;j<a.length-1-i;j++){ if (a[j]>a[j+1]) { int t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } //Arrays.toString()是列印陣列,不需要遍歷即可直接列印 System.out.println(Arrays.toString(a)); } }
結果
[4,5,11,22,33]
選擇排序
選擇排序的思想是取出一個元素,跟陣列中的其他元素一一比較大小,按從小到大輸出的話,取出的這個元素與陣列中的其他元素進行比較,如果碰到比它小的元素就和它交換值,直到這個元素比完陣列中的其他元素,這樣第一輪比完最前的那個元素就是最小的,接下來會從第二個元素開始接著上述的過程,以此類推,直到陣列中的元素按從小到大排列。程式碼演示
class Demo { public static void main(String[] args) { int[] a={22,11,4,33,5}; //外迴圈是一共進行幾輪比較的次數 for(int i=0;i<a.length-1;i++){ //內迴圈是一輪比較的次數 for(int j=i+1;j<a.length;j++){ if (a[i]>a[j]) { int t=a[i]; a[i]=a[j]; a[j]=t; } } } //Arrays.toString()是列印陣列,不需要遍歷即可直接列印 System.out.println(Arrays.toString(a)); } }
結果
[4,5,11,22,33]
二分查詢
二分查詢是在已經排好的數組裡查詢元素,並返回它的索引,它是先定義一箇中間元素如果這個中間值大於你要查詢的元素,你就往右邊繼續查詢(反之則左邊),在右邊繼續定義中間值,然後在繼續照上述過程執行,直到搜尋完所有元素。import java.util.Scanner; class Demo { public static void main(String[] args) { int[] a = {22, 33, 44, 55, 66}; //定義陣列中最大的下標 int max=a.length-1; //定義陣列中最小的下標 int min=0; /定義中間元素的下標 int mid=(max+min)/2; Scanner x = new Scanner(System.in); System.out.println("請輸入你要查詢的數字:"); int z=x.nextInt(); //當mid取到兩端值時,min和max就相當,因此迴圈條件就在min<=max while(min<=max){ //如果要查詢的元素剛好是中間元素時,退出迴圈 if(z==a[mid]){ System.out.println("索引為:"+mid); break; //如果要查詢的元素小於中間元素時,最大下標變為中間元素減1,中間元素重新計算 }else if(z<a[mid]){ max=mid-1; mid=(max+min)/2; //如果要查詢的元素大於中間元素時,最小下標變為中間元素加1,中間元素重新計算 }else { min=mid+1; mid=(max+min)/2; } } } }
結果
請輸入你要查詢的數字:
44
索引為:2
插入排序
插入排序就是在陣列中先取出最開頭的元素,然後把第二個元素和它比較,按從小到大輸出的話,如果比他大就位置不變,反之則和它進行交換,接下來再繼續取值,與前兩進行比較,過程與上述一樣執行,直到陣列中的元素從小到大排列。public class Insert {
public static void main(String[] args) {
int[] arr={5,2,7,3,1};
//一共進行幾輪比較的次數
for (int i = 0; i < arr.length; i++) {
//把i的值賦給j,這樣在裡面迴圈進行減1時,不會影響到外迴圈
int j=i;
//如果這個元素大於大於上一個元素,則進行交換,並且當前元素大於0,不然就沒有前一個元素了
while(j>0&&arr[j]>arr[j-1]){
int t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;
//當比較到第二輪以後元素會逐漸變多,為了能夠再與前面的資料進行比較,就要在當前元素的下標減1
j--;
}
}
//Arrays.toString()是列印陣列,不需要遍歷即可直接列印
System.out.println(Arrays.toString(arr));
}
結果
[7,5,3,2,1]