字元串數組排序有哪些常用演算法?

一、冒泡排序

冒泡排序是一種基礎的、簡單的排序演算法,它的排序過程中比較相鄰的兩個元素,如果它們的順序錯誤就進行交換,直到整個數組變為升序排序為止。冒泡排序的時間複雜度為O(n^2)。

void bubble_sort(char* str[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j  0) {
               char* temp = str[j];
               str[j] = str[j + 1];
               str[j + 1] = temp;
           }
        }
    }
}

二、插入排序

插入排序是一種簡單直觀的排序演算法,它的思路是將一個元素插入到已經排好序的數組中,直到全部插入完畢。插入排序的時間複雜度為O(n^2)。

void insertion_sort(char* str[], int n) {
    for (int i = 1; i  0 && strcmp(str[j], str[j - 1]) < 0; j--) {
            char* temp = str[j];
            str[j] = str[j - 1];
            str[j - 1] = temp;
        }
    }
}

三、選擇排序

選擇排序是一種簡單直觀的排序演算法,它的思路是每次從未排序的元素中選擇最小的元素,依次放置在已排好序的數組中的最後一個位置。選擇排序的時間複雜度為O(n^2)。

void selection_sort(char* str[], int n) {
    for (int i = 0; i < n; i++) {
        int min_index = i;
        for (int j = i + 1; j < n; j++) {
            if (strcmp(str[j], str[min_index]) < 0) {
                min_index = j;
            }
        }
        char* temp = str[i];
        str[i] = str[min_index];
        str[min_index] = temp;
    }
}

四、快速排序

快速排序是一種高效率、通用的排序演算法,它的思路是以一個基準元素為分界點將數組分為兩個子序列,比基準元素小的元素放在基準元素左邊,比基準元素大的元素放在右邊,然後通過遞歸排序子序列,最終達到整個序列有序的目的。快速排序的時間複雜度為O(nlogn)。

void quick_sort(char* str[], int left, int right) {
    if (left >= right) return;
    char* pivot = str[left];
    int i = left, j = right;
    while (i < j) {
        while (i = 0) j--;
        str[i] = str[j];
        while (i < j && strcmp(str[i], pivot) <= 0) i++;
        str[j] = str[i];
    }
    str[i] = pivot;
    quick_sort(str, left, i - 1);
    quick_sort(str, i + 1, right);
}

五、歸併排序

歸併排序是一種基於分治思想的排序演算法,它的思路是先將序列分成若干個子序列,分別對每個子序列進行排序,再將排好序的子序列合併成一個有序序列,最終達到整個序列有序的目的。歸併排序的時間複雜度為O(nlogn)。

void merge(char* str[], int left, int mid, int right, char* temp[]) {
    int i = left, j = mid + 1, k = 0;
    while (i <= mid && j <= right) {
        if (strcmp(str[i], str[j]) <= 0) {
            temp[k++] = str[i++];
        } else {
            temp[k++] = str[j++];
        }
    }
    while (i <= mid) {
        temp[k++] = str[i++];
    }
    while (j <= right) {
        temp[k++] = str[j++];
    }
    for (int n = 0; n = right) return;
    int mid = (left + right) / 2;
    merge_sort(str, left, mid, temp);
    merge_sort(str, mid + 1, right, temp);
    merge(str, left, mid, right, temp);
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280447.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:03
下一篇 2024-12-21 13:03

相關推薦

  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python中將字元串轉化為浮點數

    本文將介紹在Python中將字元串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字元串轉化為…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29

發表回復

登錄後才能評論