5. Danh sách liên kết – Linked list
2.3. Chèn thêm một nút mới vào cây
{
vtmin i //biến vtmin lưu vị trí phần tử nhỏ nhất a[i..n 1] for(j j<n j++)
if(a[j] < a[vtmin]) vtmin j
swap(a[vtmin], a[i]) // hàm ñổi chỗ a[vtmin], a[i] }
}
Ví d :
Với mỗi giá trị của i thuật toán thực hiện (n – i – 1) phép so sánh và vì i chạy từ cho tới (n–2), thuật toán sẽ cần (n 1) + (n 2) + … + 1 n(n 1)/2 tức là O(n2) phép so sánh. Trong mọi trường hợp số lần so sánh của thuật toán là không ñổi. Mỗi lần chạy của vòng lặp
ñối với biến i, có thể có nhiều nhất một lần ñổi chỗ hai phần tử nên số lần ñổi chỗ nhiều nhất của thuật toán là n. Như vậy trong trường hợp tốt nhất, thuật toán cần lần ñổi chỗ, trung bình cần n/2 lần ñổi chỗ và tồi nhất cần n lần ñổi chỗ.
4.2. Sắp xếp ñổi chỗ trực tiếp (Exchange sort)
Tương tự như thuật toán sắp xếp bằng chọn và rất dễ cài ñặt (thường bị nhầm với thuật toán sắp xếp chèn) là thuật toán sắp xếp bằng ñổi chỗ trực tiếp (một số tài liệu còn gọi là thuật toán Interchange sort hay Straight Selection Sort).
Mô tả Bắt ñầu xét từ phần tử ñầu tiên a[i] với i ta xét tất cả các phần tử ñứng sau a[i], gọi là a[j] với j chạy từ i+1 tới n 1 (vị trí cuối cùng). Với mỗi cặp a[i], a[j] ñó, ñể ý là a[j] là phần tử ñứng sau a[i], nếu a[j] < a[i], tức là xảy ra sai khác về vị trí thì ta sẽ ñổi chỗ
a[i], a[j].
Ví dụ minh họa: Giả sử mảng ban ñầu là int a[] {2, 6, 1, 19, 3, 12}. Các bước của thuật toán sẽñược thực hiện như sau:
i=0, j=2: 1, 6, 2, 19, 3, 12 i=1, j=2: 1, 2, 6, 19, 3, 12 i=2, j=4: 1, 2, 3, 19, 6, 12 i=3, j=4: 1, 2, 3, 6, 19, 12