Nội dung chính
Bài tập C - Sắp xếp chọn (Selection Sort) trong C
Đề bài: Viết chương trình C sắp xếp một dãy số theo thứ tự tăng dần bằng thuật toán chọn (Selection Sort).
Lời giải
Giải thuật sắp xếp chọn (Selection Sort) là một giải thuật đơn giản. Giải thuật sắp xếp này là một giải thuật dựa trên việc so sánh in-place, trong đó danh sách được chia thành hai phần, phần được sắp xếp (sorted list) ở bên trái và phần chưa được sắp xếp (unsorted list) ở bên phải. Ban đầu, phần được sắp xếp là trống và phần chưa được sắp xếp là toàn bộ danh sách ban đầu.
Phần tử nhỏ nhất được lựa chọn từ mảng chưa được sắp xếp và được tráo đổi với phần bên trái nhất và phần tử đó trở thành phần tử của mảng được sắp xếp. Tiến trình này tiếp tục cho tới khi toàn bộ từng phần tử trong mảng chưa được sắp xếp đều được di chuyển sang mảng đã được sắp xếp.
Dưới đây là chương trình C để giải bài sắp xếp chọn (Selection Sort) trong C:
#include <stdio.h> #include <stdbool.h> #define MAX 10 int arr[MAX] = {6, 7, 0, 2, 8, 1, 3, 9, 4, 5}; void selectionSort() { int indexMin, i, j; // lap qua ta ca cac so for(i = 0; i < MAX-1; i++){ // thiet lap phan tu hien tai la min indexMin = i; // kiem tra phan tu hien tai co phai la nho nhat khong for(j = i+1; j<MAX; j++){ if(arr[j] < arr[indexMin]){ indexMin = j; } } if(indexMin != i) { printf("Trao doi phan tu: [ %d, %d ]\n" , arr[i], arr[indexMin]); // Trao doi cac so int temp = arr[indexMin]; arr[indexMin] = arr[i]; arr[i] = temp; } printf("Vong lap thu %d#:",(i+1)); display(); } } void display() { int i; printf("["); // Duyet qua tat ca phan tu for(i = 0; i < MAX; i++){ printf("%d ", arr[i]); } printf("]\n"); } main() { printf("Mang du lieu dau vao: "); display(); printf("-----------------------------\n"); selectionSort(); printf("-----------------------------\n"); printf("Mang sau khi da sap xep: "); display(); }
Chạy chương trình C trên cho kết quả như sau: