a. Ý tƣởng
Xuất phát từ cuối (đầu) dãy, đổi chỗ các cặp phần tử kế cận để đƣa phần tử nhỏ (lớn) hơn trong cặp phần tử đĩ về vị trí đúng đầu (cuối) dãy hiện hành, sau đĩ sẽ khơng xét đến nĩ ở bƣớc tiếp theo,
Ở lần xử lý thứ i cĩ vị trí đầu dãy là i
Lặp lại xử lý trên cho đến khi khơng cịn cặp phần tử nào để xét. b. Thuật tốn
//input: dãy (a, n)
//output: dãy (a, n) đã được sắp xếp
Bƣớc 1 : i = Vị trí đầu;
Bƣớc 2 : j = Vị trí cuối;//Duyệt từ cuối dãy ngược về vị trí i Trong khi (j > i) thực hiện:
Nếu a[j]<a[j-1]: a[j]a[j-1];//xét cặp phần tử kế cận j = Vị trí trƣớc(j);
Bƣớc 3 : i = Vị trí kế(i); // lần xử lý kế tiếp
Nếu i = Vị trí cuối: Dừng. // Hết dãy.
Ngƣợc lại : Lặp lại Bƣớc 2. Ví dụ minh họa A[]:
i=1; j=8->2 i=2; j=8->3 1 2 3 4 5 6 7 8 1 2 12 4 8 5 6 15 i=3; j=8->4 1 2 3 4 5 6 7 8 12 2 8 5 1 6 4 15 1 2 3 4 5 6 7 8 1 12 2 8 5 4 6 15
1 2 4 12 5 8 6 15i=4; j=8->5 i=4; j=8->5 1 2 3 4 5 6 7 8 1 2 4 5 12 6 8 15 i=5; j=8->6 1 2 3 4 5 6 7 8 1 2 4 5 6 12 8 15 i=6; j=8->7 1 2 3 4 5 6 7 8 1 2 4 5 6 8 12 15 i=7; j=8 1 2 3 4 5 6 7 8 1 2 4 5 6 8 12 15
c. Đánh giá giải thuật
Số lƣợng các phép so sánh xảy ra khơng phụ thuộc vào tình trạng của dãy số ban đầu Số lƣợng phép hốn vị thực hiện tùy thuộc vào kết quả so sánh
Khuyết điểm:
Khơng nhận diện đƣợc tình trạng dãy đã cĩ thứ tự hay cĩ thứ tự từng phần.
Các phần tử nhỏ đƣợc đƣa về vị trí đúng rất nhanh, trong khi các phần tử lớn lại đƣợc đƣa về vị trí đúng rất chậm.