Lab7 SelectionSort CTDL

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

CTDL-Lab07-Cac_thuat_toan_sap_xep

Câu 1:

Câu 2:
Trong hàm SelectionSort, vòng lặp thứ nhất có điều kiện là i < N-1 vì thuật toán
sắp xếp selection sort hoạt động bằng cách tìm phần tử nhỏ nhất trong phần chưa
được sắp xếp và đổi chỗ nó với phần tử đầu tiên của phần chưa được sắp xếp. Khi
chỉ còn một phần tử chưa được sắp xếp, nó chắc chắn là phần tử lớn nhất và nó đã
ở đúng vị trí, vì vậy không cần phải xét đến nó.
Câu 3:
Câu trả lời cho các dòng lệnh có yêu cầu ghi chú:

void SelectionSort(int a[],int N ){ //Ghi chú: tại sao không sử


dụng kí hiệu & trong hàm này?

 Không sử dụng kí hiệu & vì a[] là một mảng, khi truyền mảng vào hàm, thực chất
chúng ta đang truyền địa chỉ của phần tử đầu tiên trong mảng. Do đó, mọi thay đổi
đối với mảng trong hàm cũng sẽ ảnh hưởng đến mảng gốc.

for (int i=0; i<N-1 ; i++){ //Ghi chu: vòng lặp này dùng để làm
gì?

 Vòng lặp này được sử dụng để duyệt qua từng phần tử của mảng. Mỗi lần lặp,
chúng ta sẽ tìm phần tử nhỏ nhất trong phần chưa được sắp xếp của mảng và đổi
chỗ nó với phần tử tại vị trí hiện tại.

for(int j = i+1; j < N ; j++){ //Ghi chu: vòng lặp này dùng để
làm gì?

 Vòng lặp này được sử dụng để tìm phần tử nhỏ nhất trong phần chưa được sắp xếp
của mảng.

min = j; //Ghi chu: thao tác này dùng để làm gì?


 Thao tác này cập nhật chỉ số của phần tử nhỏ nhất hiện tại trong phần chưa được
sắp xếp của mảng.

Swap(a[min], a[i]); //Ghi chu: thao tác này dùng để làm gì?

 Thao tác này đổi chỗ phần tử nhỏ nhất hiện tại với phần tử tại vị trí hiện tại. Điều
này đảm bảo rằng sau mỗi lần lặp, phần tử nhỏ nhất sẽ được đưa về vị trí đúng của
nó trong mảng đã được sắp xếp.

Câu 4 và Câu 5:
#include <stdio.h>

void Swap(int* a, int* b)


{
int c = *a;
*a = *b;
*b = c;
}

void SelectionSort(int arr[], int size, int isAscending)


{
for (int i = 0; i < size - 1; i++)
{
int min = i;

for (int j = i + 1; j < size; j++)


{
if ((isAscending && arr[j] < arr[min]) || (!isAscending && arr[j] > arr[min]))
{
min = j;
}
}

if (min != i)
{
Swap(&arr[min], &arr[i]);
}
}
}

int main()
{
FILE* file = fopen("input.txt", "r");
if (file == NULL)
{
printf("Không thể mở file.\n");
return 1;
}

int arr[100], size = 0;

while (fscanf(file, "%d", &arr[size]) == 1)


{
size++;
}

fclose(file);
// 4. Sắp xếp tăng dần
SelectionSort(arr, size, 1);
printf("Mảng đã sắp xếp theo thứ tự tăng dần:\n");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}

printf("\n");
// 5. Sắp xếp giảm dần
SelectionSort(arr, size, 0);
printf("Mảng đã sắp xếp theo thứ tự giảm dần:\n");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}

return 0;
}

Input.txt:
5 1 2 3 8 6 23 10

You might also like