首頁 >後端開發 >C++ >C 中的冒泡排序

C 中的冒泡排序

Linda Hamilton
Linda Hamilton原創
2024-12-03 01:40:14936瀏覽

排序是任何程式語言中我們都需要學習的必要概念。大多數排序是在涉及數字的陣列上完成的,是掌握遍歷和存取數組中資料的技術的墊腳石。
我們在今天的文章中要討論的排序技術類型是冒泡排序。

冒泡排序

冒泡排序是一種簡單的排序演算法,如果相鄰元素的順序錯誤,它的工作原理是重複交換相鄰元素。這種數組排序方法不適合大型資料集,因為平均值和最壞情況的時間複雜度非常高。

冒泡排序演算法:

  1. 冒泡排序透過多次排序來組織陣列。
  2. 第一遍:最大的元素移動到最後一個位置,它的正確位置。
  3. 第二遍:第二大元素移動到倒數第二個位置,並繼續進行後續遍。
  4. 每次傳遞時,僅處理數組中未排序的部分。
  5. 經過 k 次後,最大的 k 個元素在最後 k 個槽位中處於正確的位置。
  6. 在每次傳遞期間:
    • 比較未排序部分中的相鄰元素。
    • 如果較大的元素出現在較小的元素之前,則交換元素。
    • 在遍歷結束時,最大的未排序元素移動到正確的位置。 重複此過程,直到整個陣列排序完畢。

冒泡排序如何運作?

以下是冒泡排序的實作。如果內部循環沒有引起任何交換,可以透過停止演算法來優化它。

// Easy implementation of Bubble sort
#include <stdio.h>
int main(){
    int i, j, size, temp, count=0, a[100];
    //Asking the user for size of array
    printf("Enter the size of array you want to enter = \t");
    scanf("%d", &size);
    //taking the input array through loop
    for (i=0;i<size;i++){
        printf("Enter the %dth element",i);
        scanf("%d",&a[i]);
    }
    //printing the unsorted list
    printf("The list you entered is : \n");
    for (i=0;i<size;i++){
        printf("%d,\t",a[i]);
    }
    //sorting the list
    for (i = 0; i < size - 1; i++) {
        count = 1;
        for (j = 0; j < size - i - 1; j++) {
            if (a[j] > a[j + 1]) {
                //swapping elements
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
                count = 1;
            }
        }

        // If no two elements were swapped by inner loop,
        // then break
        if (count == 1)
            break;
    }
    // printing the sorted list
    printf("\nThe sorted list is : \n");
    for (i=0;i<size;i++){
        printf("%d,\t",a[i]);
    }
    return 0;

}

輸出 :

**Bubble Sort in C

冒泡排序的複雜度分析:

時間複雜度:O(n2)
輔助空間:O(1)

冒泡排序的優點:

  • 冒泡排序很容易理解和實現。
  • 不需要任何額外的記憶體空間。
  • 它是一種穩定的排序演算法,這意味著具有相同鍵值的元素在排序輸出中保持其相對順序。

冒泡排序的缺點:

  • 冒泡排序的時間複雜度為 O(n2),這使得它對大型資料集來說非常慢。
  • 冒泡排序是一種基於比較的排序演算法,這意味著它需要比較運算子來決定輸入資料集中元素的相對順序。在某些情況下它會限制演算法的效率。

有任何疑問請評論! !
所有討論都將受到讚賞:)

以上是C 中的冒泡排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn