首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言實現冒泡排序:字符串按字母順序排序

     編輯:關於C語言

冒泡排序字符串數組

冒泡排序是最基礎的排序算法,通過重複遍歷數組,比較相鄰元素並交換,將大元素逐步「冒泡」到末尾。本文展示如何對字符串指針數組進行字典序排序。

核心代碼

#include <stdio.h>
#include <string.h>

void sort_strings(char *arr[], int n) {
    int i, j;
    char *temp;
    // 外層控制遍歷輪數:n-1 輪
    for (i = 0; i < n - 1; ++i) {
        // 內層比較相鄰元素:每輪減少一次比較
        for (j = 0; j < n - 1 - i; ++j) {
            // strcmp > 0 表示前者字典序大於後者,需交換
            if (strcmp(arr[j], arr[j + 1]) > 0) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

void print_strings(char *arr[], int n) {
    for (int i = 0; i < n; ++i) {
        printf("%s ", arr[i]);
    }
    printf("\n");
}

int main() {
    char *words[] = {"ceo", "define", "basic", "abc", "empty"};
    int n = sizeof(words) / sizeof(words[0]);

    printf("原序列: ");
    print_strings(words, n);

    sort_strings(words, n);

    printf("排序後: ");
    print_strings(words, n);
    return 0;
}

運行結果

原序列: ceo define basic abc empty 
排序後: abc basic ceo define empty 

關鍵點解析

  1. 數組類型:char *arr[] 是指針數組,每個元素指向一個字符串常量。排序時交換的是指針,而非複製字符串內容,效率極高。
  2. 比較函數:strcmp(s1, s2) 返回值:
    • < 0:s1 < s2
    • = 0:s1 == s2
    • > 0:s1 > s2
  3. 循環邊界優化:內層循環 j < n - 1 - i,因為每輪結束後最大的元素已沉底,無需再比較。
  4. 穩定性:冒泡排序是穩定排序,相等元素相對順序不變。

複雜度與改進

指標數值
時間複雜度 (平均/最壞)O(n²)
時間複雜度 (最佳,已有序)O(n) - 可加旗標檢測無交換則提前結束
空間複雜度O(1)

改進版:加入有序檢測旗標

void sort_strings_optimized(char *arr[], int n) {
    int i, j;
    char *temp;
    int swapped;
    for (i = 0; i < n - 1; ++i) {
        swapped = 0;
        for (j = 0; j < n - 1 - i; ++j) {
            if (strcmp(arr[j], arr[j + 1]) > 0) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = 1;
            }
        }
        if (!swapped) break; // 本輪無交換,已有序
    }
}

實際工程中,對於小規模數據 (n < 50) 冒泡排序代碼簡單且無額外開銷可接受;大規模數據請使用 qsort (快速排序) 或 C++ std::sort。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved