OJ題之氣泡排序

Christine_Deng_發表於2021-01-01

Description

​ 實現氣泡排序。

Input

​ 輸入的每一行表示一個元素為正整數的陣列,所有值用空格隔開,第一個值為數值長度,其餘為陣列元素值。

Output

​ 輸出的每一行為排序結果,用空格隔開,末尾不要空格。

Solution?

import java.util.Scanner;
public class ojtest1_21{
    static void swap(int[] a,int i,int j){
        int temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()) {
            int n = scanner.nextInt();
            int[] a=new int[n];
            //儲存到陣列中
            for(int i=0;i<n;i++)
                a[i]=scanner.nextInt();
            //氣泡排序
            for(int i=0;i<n;i++){//一共要進行i輪
                for(int j=0;j<n-1-i;j++) {
                    if(a[j]>a[j+1])
                        swap(a,j,j+1);
                }
            }
            for(int i=0;i<n;i++) {
                if(i==n-1)
                    System.out.print(a[i]);
                else
                    System.out.print(a[i]+" ");
            }
        }
    }
}

Review?

​ 複習氣泡排序。N個元素排序,需要進行N趟。在每趟裡,相鄰的元素之間相互比較,因為此題要求的是遞增,如果左元素比右元素大,則交換二者的位置,然後繼續將右元素與其右邊的元素進行比較。以[10,1,35,61,89,55]作為例子展示,共7個元素待排序,因此共有7趟,具體每趟的結果如下:

在這裡插入圖片描述

以第1趟排序為舉例展示氣泡排序過程:

第一趟的氣泡排序過程展示結果
第1次排序:10和1比較,10大於1,交換位置[1,10,35,61,89,36,55]
第2次排序:10和35比較,10小於35,不交換位置[1,10,35,61,89,36,55]
第3次排序:35和61比較,35小於61,不交換位置[1,10,35,61,89,36,55]
第4次排序:61和89比較,61小於89,不交換位置[1,10,35,61,89,36,55]
第5次排序:89和36比較,89大於36,交換位置[1,10,35,61,36,89,55]
第6次排序:89和55比較,89大於55,交換位置[1,10,35,61,36,55,89]
55比較,89大於55,交換位置[1,10,35,61,36,55,89]

相關文章