1. Bài tập sắp xếp tăng dần các phần tử trong mảng một chiều số nguyên bằng ngôn ngữ lập trình C

Bài tập này chúng ta sẽ sử dụng các kiến thức từ ngôn ngữ lập trình C như: cách nhập xuất cơ bản, cách sử dụng mảng một chiều, cách sử dụng hàm và sử dụng thuật toán sắp xếp trong ngôn ngữ lập trình C.

Yêu cầu của bài tập đưa ra cho chúng ta là sắp xếp các phần tử có trong mảng một chiều số nguyên bằng ngôn ngữ C.

2. Lời giải

Đầu tiên để thực hiện bài toán này chúng ta cần có kiến thức cơ bản về ngôn ngữ lập trình C, các cách nhập xuất cơ bản trong C, mảng một chiều trong C , cách sử dụng hàm trong ngôn ngữ lập trình C và các thuật toán sắp xếp.

Đối bài tập này tôi sẽ sử dụng thuật toán sắp xếp chọn (selection sort) để thực hiện. Thuật toán sắp xếp chọn sẽ sắp xếp một mảng bằng cách đi tìm phần tử có giá trị nhỏ nhất (giả sử với sắp xếp mảng tăng dần) trong đoạn đoạn chưa được sắp xếp và đổi cho phần tử nhỏ nhất đó với phần tử ở đầu đoạn chưa được sắp xếp(không phải đầu mảng) rồi đổ chỗ.

Bạn cũng có thể thử sử dụng các thuật toán sắp xếp khác sẽ được đề cập trong trương trình của chúng tôi.

Các bước thực hiện yêu cầu của bài tập sắp xếp các phần tử có trong mảng một chiều số nguyên bằng ngôn ngữ C như sau:

Bước 1: Ta khai báo một mảng tĩnh số nguyên có 100 ô nhớ int a[100].

Bước 2: Ta khai báo số nguyên int n là số lượng phần tử có trong mảng với điều kiện n>1 hoặc n<100 nếu không thỏa mãn thì yêu cầu nhập lại n.

Bước 3: Ta viết hàm Sapxep(int a[], int n) dùng để sắp xếp tăng dần mảng một chiều, trong hàm ta sử dụng vòng lặp for bắt đầu từ int i = 0, kết thúc khi i<n-1 mỗi lần i tăng lên 1, trong vòng for ta tạo thêm vòng for bắt đầu từ int j = i+1, kết thúc khi j<n và mỗi lần j tăng lên 1; trong vòng for j ta sử dụng if với điều kiện a[i] > a[j] nếu thỏa mãn ta đổi chỗ a[i] cho a[j] (sử dụng biến trung gian int tg).

Bước 4: Ta khỏi tạo hàm void Nhap(int a[], int n) dùng để nhập dữ liệu từ bàn phím cho mảng. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để nhập dữ liệu cho từng phần tử từ a[0] đến a[n-1], trong vòng for thì nhập vào dữ liệu của a[i].

Bước 5: Ta khởi tạo hàm void Xuat(int a[], int n) dùng để hiển thị dữ liệu từ mảng ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để hiển thị dữ liệu của từng phần tử từ a[0] đến a[n-1] ra màn hình, trong vòng for in a[i] ra màn hình.

Bước 6: Trong hàm main ta gọi hàm Nhap(a,n), Xuat(a,n) để hiển thị mảng gốc ta gọi thêm hàm Sapxep(a,n) và hàm Xuat(a,n) để hiển thị mảng sau khi sắp xếp rồi chạy chương trình.

Chương trình giải bài tập sắp xếp các phần tử có trong mảng một chiều số nguyên bằng ngôn ngữ C như sau:

#include<stdio.h>
void Sapxep(int a[], int n)
{
    for (int i = 0; i < n-1; i++)
    {
        for (int j = i+1; j < n; j++)
        {
            if (a[i] > a[j])//neu a[i] > a[j] doi cho a[i] cho a[j]
            {
                int tg = a[i];
                a[i] = a[j];
                a[j] = tg;
            }
        }
    }
}
void Nhap(int a[], int n)//ham nhap mang
{
    for(int i=0; i<n ; i++)//vong lap for duyet phan tu trong mang tu 0 den n-1
    {
        //nhap du lieu vao mang
        printf("Nhap a[%d] = ",i);
        scanf("%d", &a[i]);
    }
}
void Xuat(int a[], int n)//ham xuat mang
{
    for(int i=0; i<n ; i++)//vong lap for duyet phan tu trong mang 0 den n-1
    {
        //hien thi cac phan tu trong mang
        printf("%d \t", a[i]);
    }
}
int main()
{
    int a[100];// khai bao mang so nguyen co 100 o nho
    int n;//khai bao so nguyen n la so phan tu cua mang
    //Nhap du lieu cua n
    do{
        printf("Nhap so phan tu cua mang:");
        scanf("%d", &n);
        if(n<1 || n>100)
        {
            printf("Nhap lai:");
        }
    }while(n<1 || n>100);//dieu kien neu n<1 hoac n>100 yeu cau nhap lai
    Nhap(a, n);//goi ham nhap mang
    printf("\nCac phan tu trong mang la:\n");
    Xuat(a,n);// goi ham xuat mang
    printf("\nMang sau khi sap xeo la:\n");
    Sapxep(a,n);
    Xuat(a,n);
}

Ví dụ tôi nhập mảng có 5 phần tử: 1, 4, 2, 10, 3.

Kết quả:

Nhap so phan tu cua mang:5
Nhap a[0] = 1
Nhap a[1] = 4
Nhap a[2] = 2
Nhap a[3] = 10
Nhap a[4] = 3Cac phan tu trong mang la:
1 4 2 10 3
Mang sau khi sap xeo la:
1 2 3 4 10

3. Tổng kết

Sau khi làm bài tập này các bạn cần phải hiểu và nắm được những kiến thức sau:

  • Cách nhập xuất cơ bản trong ngôn ngữ lập trình C.
  • Cách sử dụng hàm trong ngôn ngữ lập trình C.
  • Cách sử dụng mảng một chiều trong ngôn ngữ lập trình C.
  • Cách sử dụng thuật toán sắp xếp chọn trong ngôn ngữ lập trình C.’
  • Cách đổi chỗ phần tử thông qua biến trung gian.
  • Cách sử dụng vòng lặp for để duyệt các phần tử trong mảng.