Professional Documents
Culture Documents
Tin học
Tin học
************
A. Ý tưởng:
Thuật toán sắp xếp chèn thực hiện sắp xếp dãy số theo cách duyệt từng phần tử
và chèn từng phần tử đó vào đúng vị trí trong mảng con(dãy số từ đầu đến phần
tử phía trước nó) đã sắp xếp sao cho dãy số trong mảng sắp đã xếp đó vẫn đảm
bảo tính chất của một dãy số tăng dần.
Giải thuật sắp xếp chèn so sánh hai phần tử đầu tiên:
Giải thuật sắp xếp chèn tiếp tục di chuyển tới phần tử kế tiếp
So sánh 33 và 27.
Giải thuật sắp xếp chèn tráo đổi vị trí của 33 và 27. Đồng thời
cũng kiểm tra tất cả phần tử trong danh sách con đã sắp xếp.
Tại đây, chúng ta thấy rằng trong danh sách con này chỉ
có một phần tử 14 và 27 là lớn hơn 14. Do vậy danh sách
con vẫn giữ nguyên sau khi đã tráo đổi.
Bây giờ trong danh sách con chúng ta có hai giá trị 14
và 27. Tiếp tục so sánh 33 với 10.
Và chúng ta tiếp tục tráo đổi hai số này. Cuối cùng, sau
vòng lặp thứ 3 chúng ta có 4 phần tử.
Tiến trình trên sẽ tiếp tục diễn ra cho tới khi
tất cả giá trị chưa được sắp xếp được sắp
xếp hết vào trong danh sách con đã qua sắp
xếp.
III) MINH HỌA THUẬT TOÁN BẰNG NGÔN NGỮ LẬP TRÌNH:
Input:
#include <stdio.h>
#include <math.h>
/* Hàm sắp xếp sử dụng thuật toán sắp xếp chèn */
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;
/* Di chuyển các phần tử có giá trị lớn hơn giá trị key về sau một vị
trí so với vị trí ban đầu của nó */
while (j >= 0 && arr[j] > key)
{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
int main()
{
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr)/sizeof(arr[0]);
insertionSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
Output:
Sorted array:
5 6 11 12 13