C語言 冒泡排序

冒泡排序簡介

冒泡排序的基本操作就是將重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,時間複雜度爲O(n^2)。

冒泡排序的模擬過程可以看鏈接:BubbleSortion

實現過程

爲了比較容易地理解冒泡排序,我們可以列出一組數據,比如:
5,6,4

我列出了兩種方法分別說明插入排序的實現過程,你可以選擇自己喜歡的方法:

第一種

對於冒泡排序算法來說:
1. 第一輪:
比較5, 6–> 比較6, 4交換–> 比較4, 6
得到數據:5, 4, 6
2. 第二輪:
比較5, 4交換–> 比較4, 5
得到數據4, 5, 6

第二種

這裏寫圖片描述

分析以上過程,我們發現冒泡排序有兩個關鍵要素:
1. 爲了能夠進行重複的來回循環,我們需要用到迭代
2. 通過每次遍歷最大的數都放在了隊列的末尾

代碼實現

#include <stdio.h>

void print(const int *a, const int length) {
    int i;
    for (i = 0; i<length; i++) {
        printf("%d ", a[i]);
    }
    putchar('\n');
}

void exchange(int *a, const int i, const int j) {
    int tmp = *(a + i);
    *(a + i) = *(a + j);
    *(a + j) = tmp;
}

void bubbleSort(int *a, const int length) {
    for (int i = 0; i < length; i++) {
        //迭代
        for (int j = 0; j + 1 < length-i; j++) {
            if (a[j] > a[j + 1]) {  //前後的兩個數比較
                exchange(a, j, j + 1);
            }
        }
        print(a, length);
    }
}



void main() {
    const int length = 5;
    int my_array[5] = { 6,5,7,3,4};
    print(my_array, length);

    bubbleSort(my_array, length);
    print(my_array, length);
}

代碼精簡

void bubbleSort(int *a, const int length){
    for(int i=0; i<length-1; i++){
        for(int j=0; j<length-1-i; j++){
            if(j+1<length && a[j]>a[j+1]){
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
}
發佈了33 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章