Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Sắp xếp mảng chuỗi dùng Selection Sort trong C++


Thuật toán Selection Sort sắp xếp mảng bằng cách liên tục tìm phần tử nhỏ nhất từ phần chưa sắp xếp và đặt nó ở đầu. Trong mỗi lần lặp của selection sort, phần tử nhỏ nhất từ mảng con chưa sắp xếp được chọn và chuyển đến mảng con đã sắp xếp.

Ví dụ mã C++

#include <iostream>
#include <string.h>
using namespace std;
#define MAX_LEN 50

void selectionSort(char arr[][50], int n){
    int i, j, mIndex;
    // Di chuyển ranh giới mảng con chưa sắp xếp từng cái một
    char minStr[50];
    for (i = 0; i < n-1; i++){
        // Xác định phần tử nhỏ nhất trong mảng chưa sắp xếp
        int mIndex = i;
        strcpy(minStr, arr[i]);
        for (j = i + 1; j < n; j++){
            // Kiểm tra minStr có lớn hơn arr[j] không
            if (strcmp(minStr, arr[j]) > 0){
                // Làm arr[j] thành minStr và cập nhật min_idx
                strcpy(minStr, arr[j]);
                mIndex = j;
            }
        }
        // Hoán đổi phần tử nhỏ nhất với phần tử đầu tiên
        if (mIndex != i){
            char temp[50];
            strcpy(temp, arr[i]); // hoán đổi item[pos] và item[i]
            strcpy(arr[i], arr[mIndex]);
            strcpy(arr[mIndex], temp);
        }
    }
}

int main(){
    char arr[][50] = {"Tom", "Boyaka", "Matt", "Luke"};
    int n = sizeof(arr)/sizeof(arr[0]);
    int i;
    cout<<"Chuỗi cho trước:: Tom, Boyaka, Matt, Luke\n";
    selectionSort(arr, n);
    cout << "\nSắp xếp Selection Sort::\n";
    for (i = 0; i < n; i++)
        cout << i << ": " << arr[i] << endl;
    return 0;
}

Chương trình C++ trên ban đầu chọn phần tử nhỏ nhất trong mảng và hoán đổi với phần tử đầu tiên. Tiếp theo, hoán đổi phần tử nhỏ thứ hai với phần tử thứ hai, v.v. Do đó, với mỗi lượt, phần tử nhỏ nhất được chọn và đặt vào vị trí đúng cho đến khi toàn bộ mảng được sắp xếp. Cuối cùng, phương pháp selection sort sắp xếp chuỗi cho trước theo thứ tự tăng dần như sau:

Đầu ra

Chuỗi cho trước:: Tom, Boyaka, Matt, Luke
Selection Sorted:: Boyaka Luke Matt Tom