Lập trình xây dựng các hàm sắp xếp tăng dần và giảm dần
BÀI TẬP THỰC HÀNH SẮP XẾP CÁC PHẦN TỬ TRONG MẢNG
YÊU CẦU
· Sắp xếp các phần tử trong danh sách theo chiều tăng dần
· Sắp xếp các phần tử trong danh sách theo chiều giảm dần
· Khi cần đổi chỗ 2 phần tử, sẽ gọi hàm đổi chỗ
· Toàn bộ quá trình sắp xếp, sẽ được tách thành 1 hàm riêng
TỪNG BƯỚC THỰC HÀNH:
Khai báo sử dụng thư viện
#include <conio.h>
#include <stdio.h>
//Khai bao khuon mau ham
void DoiCho(int& y, int& x);
void SapXepTangDan(int ds[],int n);
void SapXepGiamDan(int ds[],int n);
|
2. Khai báo một mảng các phần tử kiểu int với số lượng là 10 phần tử.
int ds[10];
int n;
|
3. Nhập mảng từ bàn phím
printf("Nhap so luong phan tu:");
//Nhap vao tu ban phim
scanf("%d",&n);
//In n ra
printf("n=%d\n",n);
//Nhap cac phan tu trong mang
for (int i = 0; i<n; i++)
{
//In ra loi huong dan nhap phan tu thu may
printf("Nhap phan tu thu [%d]:",i+1);
scanf("%d",&ds[i]);
}
|
4. Thực hiện sắp xếp tăng dần/ Giảm dần
Gọi hàm tương ứng
SapXepTangDan(ds,n);
InMang(ds);
SapXepGiamDan(ds,n);
InMang(ds);
|
5. Code hàm main
int main()
{
int ds[10];
int n;
//Hien thong bao moi nguoi dung nhap
printf("Nhap so luong phan tu:");
//Nhap vao tu ban phim
scanf("%d",&n);
//In n ra
printf("n=%d\n",n);
//Nhap cac phan tu trong mang
for (int i = 0; i<n; i++)
{
//In ra loi huong dan nhap phan tu thu may
printf("Nhap phan tu thu [%d]:",i+1);
scanf("%d",&ds[i]);
}
InMang(ds,n);
printf("Sap xep mang tang dan:\n");
//goi ham
SapXepTangDan(ds,n);
InMang(ds,n);
printf("Sap xep mang giam dan:\n");
SapXepGiamDan(ds,n);
InMang(ds,n);
//In ra danh sach
getch();
}
|
6.1 Hàm Thực hiện sắp xếp tăng dần
Thực hiện sắp xếp tăng dần
Lần lượt đi qua từng phần tử cần kiểm tra. Với mỗi phần tử đó sẽ cần kiểm tra với các phần tử còn lại trong mảng; Nếu cần đổi chỗ sẽ tiến hành đổi chỗ
void SapXepTangDan(int ds[],int n)
{
for (int i = 0;i<n-1;i++)
{
for (int j = i+1; j<n;j++)
{
if (ds[i]>ds[j])
{
DoiCho(ds[i],ds[j]);
}
}
}
}
|
6.2 Hàm Thực hiện sắp xếp giảm dần
Thực hiện sắp xếp giảm dần
Lần lượt đi qua từng phần tử cần kiểm tra. Với mỗi phần tử đó sẽ cần kiểm tra với các phần tử còn lại trong mảng; Nếu cần đổi chỗ sẽ tiến hành đổi chỗ
void SapXepGiamDan(int ds[],int n)
{
for (int i = 0;i<n-1;i++)
{
for (int j = i+1; j<n;j++)
{
if (ds[i]<ds[j])
{
DoiCho(ds[i],ds[j]);
}
}
}
}
|
6.3 Hàm đổi chỗ 2 phần tử
Thực hiện đổi giá trị của 2 biến truyền vào
void DoiCho(int& y, int& x)
{
int tg = x;
x = y;
y = tg;
}
|
6.4 Hàm in ra màn hình các giá trị của mảng
Thực hiện đổi giá trị của 2 biến truyền vào
void InMang(ds[],int n)
{
printf("Danh sach da sap xep la:\n");
for (int i = 0;i<n;i++)
{
printf("ds[%d]=%d\n",i,ds[i]);
}
}
|
7. Tổng hợp Code
#include <stdio.h>
#include <conio.h>
void DoiCho(int& y, int& x);
void SapXep(int ds[],int n);
int main()
{
int ds[10];
int n;
//Hien thong bao moi nguoi dung nhap
printf("Nhap so luong phan tu:");
//Nhap vao tu ban phim
scanf("%d",&n);
//In n ra
printf("n=%d\n",n);
//Nhap cac phan tu trong mang
for (int i = 0; i<n; i++)
{
//In ra loi huong dan nhap phan tu thu may
printf("Nhap phan tu thu [%d]:",i+1);
scanf("%d",&ds[i]);
}
InMang(ds,n);
printf("Sap xep mang tang dan:\n");
//goi ham
SapXepTangDan(ds,n);
InMang(ds,n);
printf("Sap xep mang giam dan:\n");
SapXepGiamDan(ds,n);
InMang(ds,n);
//In ra danh sach
getch();
}
void InMang(ds[],int n)
{
printf("Danh sach da sap xep la:\n");
for (int i = 0;i<n;i++)
{
printf("ds[%d]=%d\n",i,ds[i]);
}
}
void SapXepTangDan(int ds[],int n)
{
for (int i = 0;i<n-1;i++)
{
for (int j = i+1; j<n;j++)
{
if (ds[i]>ds[j])
{
DoiCho(ds[i],ds[j]);
}
}
}
}
void SapXepGiamDan(int ds[],int n)
{
for (int i = 0;i<n-1;i++)
{
for (int j = i+1; j<n;j++)
{
if (ds[i]<ds[j])
{
DoiCho(ds[i],ds[j]);
}
}
}
}
void DoiCho(int& y, int& x)
{
int tg = x;
x = y;
y = tg;
}
|
No comments: