1. 程式人生 > >氣泡排序、選擇排序、二分查詢、插入排序

氣泡排序、選擇排序、二分查詢、插入排序

氣泡排序、選擇排序、二分查詢、插入排序

氣泡排序

  氣泡排序的思想就是兩兩比較,按從小到大輸出的話,兩個值相比,較小的放前大的放後,那麼第一次兩兩比較結束後,最大值放在末尾,接下來再繼續兩兩比較,但是這一次不需要比較到最後,因為最後已經是最大值了,所以每次兩兩比較結束後,都會少比一次,然後以此類推,直到陣列中按從大到小排列。
程式碼演示
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]

在這裡插入圖片描述