Professional Documents
Culture Documents
SORT
SORT
a) Ý tưởng:
Chọn phần tử nhỏ thứ i theo thứ tự R trong danh sách A và đặt vào vị trí i của danh sách.
b) Thuật toán:
Đầu vào: A={a0, a1, .., an-1} chưa có thứ tự R
Đầu ra: A={ a0, a1, .., an-1} đã có thứ tự R
B1: Khởi i = 0 là biến chỉ mục của phần tử đầu tiên của mảng.
B2: Tìm phần tử nhỏ nhất trong mảng {ai, ai+1, .., an}.
B3: Đổi chỗ phần tử vừa tìm được với ai.
B4: Tăng i thêm 1 đơn vị.
B5: So sánh i và n, nếu i < n quay lại bước 2, nếu không kết thúc thuật toán.
Code:
void SelectionSort(int arr[], int n)
{
int i, j, min;
for (i = 0; i < n - 1; i++)
{
min = i;
for (j = i + 1; j < n; j++)
if (arr[j] < arr[min])
min = j;
swap(arr[min], arr[i]);
}
}
QUICK SORT:
a) Ý tưởng:
Quick sort chia mảng thành hai phần bằng cách so sánh từng phần tử của mảng với một phần tử
được gọi là phần tử chốt. Một mảng bao gồm các phần tử nhỏ hơn hoặc bằng phần tử chốt và
một mảng gồm các phần tử lớn hơn phần tử chốt.
Quá trình phân chia này diễn ra cho đến khi độ dài của các mảng con đều bằng 1. Với phương
pháp đệ quy ta có thể sắp xếp nhanh các mảng con. Sau khi kết thúc chương trình ta được một
mảng đã sắp xếp hoàn chỉnh.
b) Thuật toán:
while (i <= j)
{
while (arr[i] < pivot)
i++;
if (i <= j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
0 1 2 3 4 5 6 7 8 9
69 21 49 53 44 13 14 17 77 88
l = 0, r = 7, pivot = 3, X = A[3]
0 1 2 3 4 5 6 7
69 21 49 53 44 13 14 17
0 1 2 3 4 5 6 7
21 49 44 13 14 17 53 69
l = 0, r = 5, pivot = 2, X = A[2]
0 1 2 3 4 5
21 49 44 13 14 17
0 1 2 3 4 5
21 13 14 17 44 49
l = 0, r = 3, pivot = 1, X = A[1]
0 1 2 3
21 13 14 17
0 1 2 3
13 21 14 17
l = 1, r = 3, pivot = 2, X = A[2]
1 2 3
21 14 17
1 2 3
14 21 17
l = 2, r = 3, pivot = 2, X =A[2]
2 3
21 17
2 3
17 21
Kết quả:
0 1 2 3 4 5 6 7 8 9
13 14 17 21 44 49 53 69 77 88
MERGE SORT
a) Ý tưởng:
Giống như Quick sort, Merge sort là một thuật toán chia để trị. Thuật toán này chia mảng cần
sắp xếp thành 2 nửa. Tiếp tục lặp lại việc này ở các nửa mảng đã chia. Sau cùng gộp các nửa đó
thành mảng đã sắp xếp.
b) Thuật toán:
69 21 49 53 77 44 88 13 14 17
69 21 49 53 77 44 88 13 14 17
69 21 49 53 77 44 88 13 14 17
69 21 49 53 77 44 88 13 14 17
21 69 49 53 77 44 88 13 14 17
21 49 69 53 77 13 44 88 14 17
21 49 53 69 77 13 14 17 44 88
13 14 17 21 44 49 53 69 77 88