You are on page 1of 16

BÀI TẬP TUẦN 5

Bài tập cơ bản


1. Nhập vào một chuỗi số nguyên có độ dài bất kỳ (mảng thứ
nhất)
2. Cài đặt giải thuật sắp xếp chuỗi số nguyên theo thứ tự tăng
dần bằng 3 cách sắp xếp cơ bản : Selection _ sort, Insertion _sort
và Bubble _ sort.
3. In chính xác vị trí và giá trị các phần tử mảng tại từng bước
duyệt mảng tương ứng với 3 cách sắp xếp trên
4. Nhập vào mảng thứ 2 có độ dài bất kỳ. Sắp xếp theo thứ giảm
dần sau đó trộn với mảng thứ nhất để có được một mảng có quy
luật sắp xếp giảm dần của các phần tử. Ưu tiên giải thuật có T(n)
nhỏ nhất.
Bài làm:
1. Sắp xếp mảng tăng dần Slection sort
#include <stdio.h>

void Nhap_Mang(int arr[], int n)


{
for(int i = 0; i < n; i++)
{
printf("\nNhap phan tu tai vi tri %d: ", i+1);
1
scanf("%d", &arr[i]);

}
}

void Swap(int &xp, int &yp)


{
int temp = xp;
xp = yp;
yp = temp;
}

void Selection_Sort(int arr[], int n)


{
int i, j, min_idx;
for (i = 0; i < n-1; i++)
{
min_idx = i;
for (j = i+1; j < n; j++)

2
if (arr[j] < arr[min_idx])
min_idx = j;
Swap(arr[min_idx], arr[i]);
}
}
void Xuat_Mang(int arr[], int n)
{
for(int i = 0; i < n; i++)
{
printf(" %d", arr[i]);

}
}

int main()
{
int arr[100];
int n;
printf("\nNhap so luong phan tu mang A: ");
3
scanf("%d", &n);
Nhap_Mang(arr, n);

Selection_Sort(arr, n);
printf("\n=> Slection Sort: ");
Xuat_Mang(arr, n);
return 0;
}
2. Sắp xếp mảng tăng dần Insertion sort
#include <stdio.h>
#include <math.h>

void Nhap_Mang(int arr[], int n)


{
for(int i = 0; i < n; i++)
{
printf("\nNhap phan tu tai vi tri %d: ", i+1);
scanf("%d", &arr[i]);

4
}
}
void Insertion_Sort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;

while (j >= 0 && arr[j] > key)


{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
void Xuat_Mang(int arr[], int n)
5
{
for(int i = 0; i < n; i++)
{
printf(" %d", arr[i]);

}
}

int main()
{
int arr[100];
int n;
printf("\nNhap so luong phan tu mang A: ");
scanf("%d", &n);
Nhap_Mang(arr, n);

Insertion_Sort(arr, n);
printf("\n=> Insertion Sort: ");
Xuat_Mang(arr, n);

6
return 0;
}
3. Sắp xếp mảng tăng dần Bubble sort
#include <stdio.h>

void Nhap_Mang(int arr[], int n)


{
for(int i = 0; i < n; i++)
{
printf("\nNhap phan tu tai vi tri %d: ", i+1);
scanf("%d", &arr[i]);

}
}

void swap(int &x, int &y)


{
int temp = x;
x = y;

7
y = temp;
}

void Bubble_Sort(int arr[], int n)


{
int i, j;
bool haveSwap = false;
for (i = 0; i < n-1; i++){

haveSwap = false;
for (j = 0; j < n-i-1; j++){
if (arr[j] > arr[j+1]){
swap(arr[j], arr[j+1]);
haveSwap = true;
}
}

if(haveSwap == false){
break;

8
}
}
}

void Xuat_Mang(int arr[], int n)


{
for(int i = 0; i < n; i++)
{
printf(" %d", arr[i]);

}
}

int main()
{
int arr[100];
int n;
printf("\nNhap so luong phan tu mang A: ");
scanf("%d", &n);

9
Nhap_Mang(arr, n);

Bubble_Sort(arr, n);
printf("\n=> Bubble Sort: ");
Xuat_Mang(arr, n);
return 0;
}
4. Sắp xếp giảm dần mảng 2, gộp mảng 1 với mảng 2 rồi sắp
xếp giảm dần
#include <stdio.h>
#include <math.h>

void Nhap_Mang(int arr[], int &n)


{
for(int i = 0; i < n; i++)
{
printf("\nNhap phan tu tai vi tri %d: ", i+1);
scanf("%d", &arr[i]);

10
}
}
void Insertion_Sort1(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;

while (j >= 0 && arr[j] > key)


{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
void Insertion_Sort2(int arr[], int m)
11
{
int i, key, j;
for (i = 1; i < m; i++)
{
key = arr[i];
j = i-1;

while (j >= 0 && arr[j] < key)


{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
void Gop(int arr1[],int n,int arr2[],int m,int arr3[],int &p)
{
p=n+m;
for(int i=0;i<p;i++)
12
{
if(i<n)
arr3[i]=arr1[i];
else arr3[i]=arr2[i-n];
}
}

void Insertion_Sort3(int arr[], int p)


{
int i, key, j;
for (i = 1; i < p; i++)
{
key = arr[i];
j = i-1;

while (j >= 0 && arr[j] < key)


{
arr[j+1] = arr[j];
j = j-1;
13
}
arr[j+1] = key;
}
}

void Xuat_Mang(int arr[], int n)


{
for(int i = 0; i < n; i++)
{
printf(" %d", arr[i]);

}
}
int main()
{
int arr1[100], arr2[100], arr3[100];
int n,m,p;
printf("\nNhap so luong phan tu mang A: ");
scanf("%d", &n);
14
Nhap_Mang(arr1, n);

Insertion_Sort1(arr1, n);
printf("\n=> Insertion Sort A: ");
Xuat_Mang(arr1, n);

printf("\nNhap so luong phan tu mang B: ");


scanf("%d", &m);
Nhap_Mang(arr2,m);

Insertion_Sort2(arr2, m);
printf("\n=> Insertion Sort B: ");
Xuat_Mang(arr2, m);

printf("\n=> Mang C tu gop A&B:");


Gop(arr1,n,arr2,m,arr3,p);
Xuat_Mang(arr3, p);

Insertion_Sort3(arr3, p);

15
printf("\n=> Insertion Sort C: ");
Xuat_Mang(arr3, p);
return 0;
}

16

You might also like