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:
  1. 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;
}

8. Giao diện kết quả




No comments:

Powered by Blogger.