SlideShare a Scribd company logo
Sắp xếp nổi bọt (Bubble Sort)
 Ý tưởng
Đi từ trái sang phải mảng A, nếu gặp hai phần tử kề nhau mà không đúng trật tự (khóa của
phần tử trước lớn hơn khóa của phần tử sau) thì hoán vị hai phần tử này. Sau quá trình này A[n]
có giá trị lớn nhất. Thực hiện quá trình trên cho dãy các phần tử từ A[1] tới A[n-1] thì A[n-1] sẽ
có giá trị lớn nhất trong dãy này...Thực hiện cho dãy cuối cùng gồm A[1] và A[2] sẽ được dãy
sắp xếp.
 Thuật toán
Giả sử cần sắp xếp dãy gồm n phần tử a[1..n].
Ta đi từ trái qua phải của dãy, nếu gặp 2 phần tử kề nhau mà ngược thứ tự sắp xếp thì ta đổi
chỗ chúng cho nhau. Kết thúc bước đầu tiên, ta được a[n] là phần tử lớn nhất trong dãy, còn
các phần tử nhỏ hơn sẽ được “nổi” dần lên trên. Lặp lại quá trình trên với các đoạn đầu a[1..i]
với i chạy giảm từ n xuống đến 2, ta sẽ nhận được toàn bộ dãy a[1..n] được sắp xếp.
 Thủ tục
Procedure BubbleSort (var a: mang; n: Integer);
Var i, j: Integer;
Begin
For i:= n downto 2 do
For j:= 1 to i – 1 do
If a[j] > a[j+1] then
Swap (a[j], a[j+1]);
End;
Ví dụ.
Sắp xếp dãy sau:
a1 a2 a3 a4 a5 a6 a7
7 1 9 3 8 5 12 i=7
1 7 3 8 5 9 12 i=6
1 3 7 5 8 9 12 i=5
1 3 5 7 8 9 12 i=4
1 3 5 7 8 9 12 i=3
1 3 5 7 8 9 12 i=2
1 3 5 7 8 9 12
 Độ phức tạp
Phép toán tích cực: Phép so sánh.
Ở lần lặp thứ i, phép so sánh được thực hiện (i-1) lần.
Ta có:
Tmax(n)=Ttb(n)=Tmin(n)= i=2
n
(i − 1)=
𝑛−1 𝑛
2
=O(n2)
 Nhận xét
Trường hợp tại bước thứ i, các phần tử đều nằm đứng thứ tự thì ta có thể dừng
thuật toán lại luôn.
Vậy, ta có thể cải tiến thủ tục trên bằng cách thêm vào một biến kiểm tra kiểu
Boolean, biến này sẽ nhận giá trị True nếu dãy đã sắp đúng thứ tự và nhận giá trị
False trong trường hợp ngược lại.
Thủ tục cải tiến sẽ như sau:
Procedure Bubble_Sort(var a: mang; n: Integer);
Var i, j: Integer;
Ktr: Boolean;
Begin
i:=n;
ktr:=False;
While (i>=2) and ( not ktr) do
Begin
Ktr:=true;
For j:=1 to i – 1 do
If a[ j ] > a [ j+1 ] then
Begin
Swap (a [ j ], a [ j+1 ]);
Ktr:= false;
End;
Dec(i);
End;
End;
Ví dụ
Sắp xếp dãy ở trên:
a1 a2 a3 a4 a5 a6 a7
7 1 9 3 8 5 12 i=7,ktr=F
1 7 3 8 5 9 12 i=6,ktr=F
1 3 7 5 8 9 12 i=5,ktr=F
1 3 5 7 8 9 12 i=4,ktr=F
1 3 5 7 8 9 12

More Related Content

Similar to Saxep

Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Nguyễn Công Hoàng
 
Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
gaconne1985
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Nguyễn Công Hoàng
 
Sap xep va tim kiem
Sap xep va tim kiem Sap xep va tim kiem
Sap xep va tim kiem acumenvn
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
Nguyễn Công Hoàng
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toán
Hồ Lợi
 
Qhd
QhdQhd
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTrần Nguyên
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
MasterCode.vn
 
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCMLy thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
hazzthuan
 
Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)
Võ Tâm Long
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
TinHoc_tuyentapde_nk
TinHoc_tuyentapde_nkTinHoc_tuyentapde_nk
TinHoc_tuyentapde_nk
Quyen Hong
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 

Similar to Saxep (20)

Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
 
Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)
 
Chap4 new
Chap4 newChap4 new
Chap4 new
 
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Sap xep va tim kiem
Sap xep va tim kiem Sap xep va tim kiem
Sap xep va tim kiem
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toán
 
Qhd
QhdQhd
Qhd
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCMLy thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
 
Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
TinHoc_tuyentapde_nk
TinHoc_tuyentapde_nkTinHoc_tuyentapde_nk
TinHoc_tuyentapde_nk
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 

Saxep

  • 1. Sắp xếp nổi bọt (Bubble Sort)  Ý tưởng Đi từ trái sang phải mảng A, nếu gặp hai phần tử kề nhau mà không đúng trật tự (khóa của phần tử trước lớn hơn khóa của phần tử sau) thì hoán vị hai phần tử này. Sau quá trình này A[n] có giá trị lớn nhất. Thực hiện quá trình trên cho dãy các phần tử từ A[1] tới A[n-1] thì A[n-1] sẽ có giá trị lớn nhất trong dãy này...Thực hiện cho dãy cuối cùng gồm A[1] và A[2] sẽ được dãy sắp xếp.  Thuật toán Giả sử cần sắp xếp dãy gồm n phần tử a[1..n]. Ta đi từ trái qua phải của dãy, nếu gặp 2 phần tử kề nhau mà ngược thứ tự sắp xếp thì ta đổi chỗ chúng cho nhau. Kết thúc bước đầu tiên, ta được a[n] là phần tử lớn nhất trong dãy, còn các phần tử nhỏ hơn sẽ được “nổi” dần lên trên. Lặp lại quá trình trên với các đoạn đầu a[1..i] với i chạy giảm từ n xuống đến 2, ta sẽ nhận được toàn bộ dãy a[1..n] được sắp xếp.
  • 2.  Thủ tục Procedure BubbleSort (var a: mang; n: Integer); Var i, j: Integer; Begin For i:= n downto 2 do For j:= 1 to i – 1 do If a[j] > a[j+1] then Swap (a[j], a[j+1]); End;
  • 3. Ví dụ. Sắp xếp dãy sau: a1 a2 a3 a4 a5 a6 a7 7 1 9 3 8 5 12 i=7 1 7 3 8 5 9 12 i=6 1 3 7 5 8 9 12 i=5 1 3 5 7 8 9 12 i=4 1 3 5 7 8 9 12 i=3 1 3 5 7 8 9 12 i=2 1 3 5 7 8 9 12  Độ phức tạp Phép toán tích cực: Phép so sánh. Ở lần lặp thứ i, phép so sánh được thực hiện (i-1) lần. Ta có: Tmax(n)=Ttb(n)=Tmin(n)= i=2 n (i − 1)= 𝑛−1 𝑛 2 =O(n2)
  • 4.  Nhận xét Trường hợp tại bước thứ i, các phần tử đều nằm đứng thứ tự thì ta có thể dừng thuật toán lại luôn. Vậy, ta có thể cải tiến thủ tục trên bằng cách thêm vào một biến kiểm tra kiểu Boolean, biến này sẽ nhận giá trị True nếu dãy đã sắp đúng thứ tự và nhận giá trị False trong trường hợp ngược lại.
  • 5. Thủ tục cải tiến sẽ như sau: Procedure Bubble_Sort(var a: mang; n: Integer); Var i, j: Integer; Ktr: Boolean; Begin i:=n; ktr:=False; While (i>=2) and ( not ktr) do Begin Ktr:=true; For j:=1 to i – 1 do If a[ j ] > a [ j+1 ] then Begin Swap (a [ j ], a [ j+1 ]); Ktr:= false; End; Dec(i); End; End;
  • 6. Ví dụ Sắp xếp dãy ở trên: a1 a2 a3 a4 a5 a6 a7 7 1 9 3 8 5 12 i=7,ktr=F 1 7 3 8 5 9 12 i=6,ktr=F 1 3 7 5 8 9 12 i=5,ktr=F 1 3 5 7 8 9 12 i=4,ktr=F 1 3 5 7 8 9 12