Professional Documents
Culture Documents
Lab7 SelectionSort CTDL
Lab7 SelectionSort CTDL
Lab7 SelectionSort CTDL
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ú:
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.
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>
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;
}
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