冒泡排序法


 冒泡排序算法原理

  1、進行比較相鄰的元素,如果第一個元素比第二個元素大,swap(a1,a2);

  2、對每一對相鄰元素做相同的工作(一共做n - 1次),從最開始的一對到結尾的一對。

   每次循環都會找出最后n - 1 - i個元素位的最大值元素。

  3、重復上述步驟,直到所有的元素都進行比較完畢,結束循環。

算法流程圖:

源代碼:

 

#include<stdio.h>

int main(){
    int arr[10] = {9,5,2,7,3,1,6,4,0,8};
    int i = 0, j = 0;
    // 冒泡排序
    // 第一層循環表示數組需要重復[1,2]步驟的次數,即(n - 1)次
    for(; i < sizeof(arr) / sizeof(arr[0]) - 1; i++){
        // 第二層循環表示每次[1, 2]步驟中每組元素進行比較的次數
        for(; j < sizeof(arr) / sizeof(arr[0] - 1 - i); j++){
            if(arr[j] > arr[j + 1]){
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    // 打印arr數組元素
    for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

arr數組

實現步驟簡單敘述:

  第一次  cmp<9,5> => [5,9 ...]

        cmp<9,2> => [5,2,9 ...]

        cmp<9,7> => [5,2,7,9 ...]

        ......

        cmp<9,8> => [5,2,7,3,1,6,4,0,8,9] 第一次冒泡完成

  ......

  最后第二次完成后的arr數組[1,0,2,3,4,5,6,7,8,9]

  最后一次 cmp<0,1,2,3,4,5,6,7,8,9>

  至此,冒泡排序全部完成。

冒泡排序優化

這樣的代碼,當面對一個已經排好序的數組時將會做很多的無效操作。 排序過程中,當某次遍歷中沒有進行數據交換,則代表數組已經排好序了

// 就是在源代碼的基礎上進行一些簡單修改
// 冒泡排序法
for (int i = 0; i < sizeof(test) / sizeof(test[0]) - 1; i++) {
    int index = 1;    //    假設冒泡排序已經完成
    for (int j = 0; j < sizeof(test) / sizeof(test[0]) - 1 - i; j++) {
        if (test[j] > test[j + 1]) {
            int temp = test[j];
            test[j] = test[j + 1];
            test[j + 1] = temp;
            index = 0;
        }
        if (index == 1) {
            break;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM