×

Thuật Toán Sắp Xếp Chọn trong Lập Trình C

Dưới đây là một chương trình C sử dụng thuật toán sắp xếp chọn (Selection Sort) để sắp xếp một mảng số nguyên theo thứ tự tăng dần. Thuật toán sắp xếp chọn là một thuật toán sắp xếp đơn giản, hoạt động bằng cách lặp qua mảng, tìm kiếm phần tử nhỏ nhất và đổi chỗ nó với phần tử ở vị trí đầu tiên của mảng, sau đó lặp lại quy trình tương tự với phần còn lại của mảng:

#include <stdio.h>

void selectionSort(int arr[], int n) {
    int i, j, min_idx, temp;

    // Di chuyển ranh giới của mảng đã sắp xếp và chưa sắp xếp
    for (i = 0; i < n-1; i++) {
        // Tìm phần tử nhỏ nhất trong mảng chưa sắp xếp
        min_idx = i;
        for (j = i+1; j < n; j++)
          if (arr[j] < arr[min_idx])
            min_idx = j;

        // Đổi chỗ phần tử nhỏ nhất với phần tử đầu tiên
        temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
    int i;

    printf("Mang truoc khi sap xep: \n");
    for (i=0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");

    selectionSort(arr, n);

    printf("Mang sau khi sap xep: \n");
    for (i=0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");

    return 0;
}

Trong chương trình này:

  • Hàm selectionSort nhận vào mảng arr và kích thước của mảng n, sau đó sắp xếp các phần tử của mảng theo thứ tự tăng dần.
  • Trong hàm main, một mảng số nguyên arr được khai báo và khởi tạo. Sau đó, kích thước của mảng được tính toán và mảng được in ra trước và sau khi sắp xếp.
  • Hàm selectionSort sử dụng hai vòng lặp for: vòng lặp ngoài để di chuyển ranh giới của mảng đã sắp xếp và mảng chưa sắp xếp, và vòng lặp trong để tìm phần tử nhỏ nhất trong mảng chưa sắp xếp.
  • Khi phần tử nhỏ nhất được tìm thấy, nó được đổi chỗ với phần tử đầu tiên của mảng chưa sắp xếp (phần tử ở vị trí i).

Chương trình này minh họa cách sắp xếp một mảng số nguyên theo thứ tự tăng dần bằng thuật toán sắp xếp chọn, một kỹ thuật cơ bản trong lập trình và thuật toán.

Comments