Radix Sort mit dynamischem Array

C++C++Beginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir einen Radix-Sort-Algorithmus in C++ implementieren, um ein Array mit Hilfe eines dynamischen Arrays zu sortieren. Radix Sort ist ein Sortieralgorithmus, der die Sortierung durch die Verarbeitung einzelner Ziffern in verschiedenen Positionen vornimmt.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp(("C++")) -.-> cpp/FunctionsGroup(["Functions"]) cpp/BasicsGroup -.-> cpp/arrays("Arrays") cpp/BasicsGroup -.-> cpp/strings("Strings") cpp/ControlFlowGroup -.-> cpp/conditions("Conditions") cpp/ControlFlowGroup -.-> cpp/for_loop("For Loop") cpp/FunctionsGroup -.-> cpp/function_parameters("Function Parameters") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/arrays -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/strings -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/conditions -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/for_loop -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/function_parameters -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/output -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/standard_containers -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} cpp/code_formatting -.-> lab-96162{{"Radix Sort mit dynamischem Array"}} end

Bibliotheken einbinden und Funktion einrichten

Beginnen Sie, indem Sie in das Verzeichnis ~/project eine C++-Datei namens main.cpp erstellen. Fügen Sie die Bibliotheken iostream und vector hinzu und legen Sie eine Funktion radix_sort an, die einen std::vector von ganzen Zahlen annimmt.

#include <iostream>
#include <vector>
using namespace std;

void radix_sort(vector<int>& nums) {

}

Definiere die getMax-Funktion

Definieren Sie eine Funktion get_max, die einen Integer-Vektor als Eingabe nimmt und den maximalen Wert zurückgibt.

int get_max(vector<int>& nums) {
    int max = nums[0];
    for(int i = 1; i < nums.size(); i++) {
        if(nums[i] > max)
            max = nums[i];
    }
    return max;
}

Definiere die CountingSort-Funktion

Definieren Sie eine Funktion counting_sort, die einen Integer-Vektor, einen ganzzahligen Wert für den aktuellen Stellenwert und einen Integer-Vektor für die Ausgabe annimmt. Die Funktion wird das Vektor basierend auf dem aktuellen Stellenwert mit dem Counting-Sort-Algorithmus sortieren.

void counting_sort(vector<int>& nums, int place, vector<int>& output) {
    const int max = 10;
    int count[max];

    for(int i = 0; i < max; i++)
        count[i] = 0;

    for(int i = 0; i < nums.size(); i++)
        count[(nums[i] / place) % 10]++;

    for(int i = 1; i < max; i++)
        count[i] += count[i - 1];

    for(int i = nums.size() - 1; i >= 0; i--) {
        output[count[(nums[i] / place) % 10] - 1] = nums[i];
        count[(nums[i] / place) % 10]--;
    }

    for(int i = 0; i < nums.size(); i++)
        nums[i] = output[i];
}

Definiere die RadixSort-Funktion

Definieren Sie eine Funktion radix_sort, die einen Integer-Vektor als Eingabe annimmt. Diese Funktion wird den maximalen Wert aus dem Eingabevektor ermitteln und die counting_sort-Funktion verwenden, um den Vektor basierend auf jedem Stellenwert zu sortieren.

void radix_sort(vector<int>& nums) {
    int max = get_max(nums);

    for(int place = 1; max / place > 0; place *= 10) {
        vector<int> output(nums.size());
        counting_sort(nums, place, output);
    }
}

Testen

Testen Sie die radix_sort-Funktion, indem Sie eine main-Funktion erstellen, die einen Testvektor erstellt und ausgibt.

int main() {
    vector<int> test = {121, 432, 564, 23, 1, 45, 788};
    radix_sort(test);

    for(int num : test)
        cout << num << " ";
    cout << endl;

    return 0;
}

Kompilieren und Ausführen

Kompilieren und führen Sie das Programm im Terminal mit dem folgenden Befehl aus:

g++ main.cpp -o main &&./main

Sie sollten die folgende Ausgabe sehen:

1 23 45 121 432 564 788

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen Radix-Sort-Algorithmus in C++ mit dynamischen Arrays durchführt. Der Radix-Sort-Algorithmus funktioniert, indem er einzelne Ziffern in verschiedenen Positionen verarbeitet, und ist ein häufig verwendeter Sortieralgorithmus für Integer und Strings.