1. 程式人生 > 其它 >試題 基礎練習 楊輝三角形

試題 基礎練習 楊輝三角形

技術標籤:資料結構Java

氣泡排序

1、氣泡排序基本演算法實現

a主要思想

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-u9iXBfXW-1611149444912)(C:\Users\29455\AppData\Roaming\Typora\typora-user-images\1611147477647.png)]

b、程式碼實現

public static void main(String[] args) {
        int[] a = {1,5,9,8,7,4};
        for (int i = 0; i < a.length -
1; i++) { for(int j = 0; j < a.length - i - 1; j++){ //從小到大排序 if(a[j] > a[j + 1]){ int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int
i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } 執行結果: 1 4 5 7 8 9

2、氣泡排序API

a、氣泡排序API設計

類名Bubble
構造方法Bubble():建立Bubble物件
成員方法1、public static void sort(Comparable[] a) 對陣列內元素進行排序
2、private static boolean greater(Comparable a, Comparable b)判斷元素大小
3、private static void exch(Comparable a, int i, int j)對陣列內元素進行交換

b、氣泡排序API程式碼實現

public class Bubble {

    //進行排序處理
    public static void sort(Comparable[] a){
        for(int i = 0; i < a.length - 1; i++){
            for(int j = 0; j < a.length - 1 - i; j++){
                if(greater(a[j], a[j + 1])){
                    exch(a, j, j + 1);
                }
            }
        }
    }

    //判斷兩個數的大小
    private static boolean greater(Comparable a,Comparable b){
        return a.compareTo(b) > 0;
    }

    //交換陣列索引值
    private static void exch(Comparable[] a, int i, int j){
        Comparable temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

Test測試

import java.util.Arrays;

public class BubbleTest {

    public static void main(String[] args) {
        Integer[] a = {6,5,4,3,2,1};
        Bubble.sort(a);
        System.out.println(Arrays.toString(a));

        Double[] b = {9.9,6.6,5.5,3.3,1.1,0.9};
        Bubble.sort(b);
        System.out.println(Arrays.toString(b));
    }
}

執行結果:
    [1, 2, 3, 4, 5, 6]
[0.9, 1.1, 3.3, 5.5, 6.6, 9.9]

3、氣泡排序時間複雜度分析

氣泡排序使用了雙層for迴圈,其中內層迴圈的迴圈體是真正完成排序的程式碼,所以在分析複雜度時,主要分析內層迴圈

在最壞情況下,也就是說待排序的陣列和排序演算法為逆序時,那麼

元素的比較次數:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

元素的交換次數:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

總的執行次數為

n^2 - n

/ 2

元素的交換次數:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

總的執行次數為

n^2 - n

按照大O記法推導,保留函式中的最高階項那麼最終氣泡排序的時間複雜度為O(n^2)