Bài toán sắp xếp Định nghĩa Sắp xếp là quá trình xử lý một danh sách các phần tử để đặt chúng theo một thứ tự thỏa mãn một tiêu chuẩn nào đó dựa trên nội dung thông tin lưu giữ tại
Trang 1Môn học:
Cấu trúc dữ liệu 1
Chương 3-Phần 2: Sắp xếp
ThS Trương Thị Ngọc Phượng Khoa CNTT
Trường ĐHSPKT TP HCM
Trang 2Chương 3 – Phần 2 – Sắp xếp 2 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 3I Bài toán sắp xếp
Định nghĩa
Sắp xếp là quá trình xử lý một danh sách các
phần tử để đặt chúng theo một thứ tự thỏa mãn một tiêu chuẩn nào đó dựa trên nội dung thông tin lưu giữ tại mỗi phần tử đó
Sắp tăng hoặc sắp giảm
Sử dụng kiểu dữ liệu mảng để minh họa
Phân loại
Sắp xếp nội
Sắp xếp ngoại
Trang 4Chương 3 – Phần 2 – Sắp xếp 4 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 5IV PP đổi chỗ trực tiếp
Trang 6Chương 3 – Phần 2 – Sắp xếp 6 Trương Thị Ngọc Phượng - CNTT - SPKT
IV PP đổi chỗ trực tiếp
Giải thuật
Bước 1: i = 1;
Bước 2: j = i+1;
Trong khi mà j ≤ N thực hiện
Nếu a[j] < a[i] thì Hoán vị (a[i], a[j]);
Trang 7IV PP đổi chỗ trực tiếp
Trang 8Chương 3 – Phần 2 – Sắp xếp 8 Trương Thị Ngọc Phượng - CNTT - SPKT
IV PP đổi chỗ trực tiếp
Trang 9IV PP đổi chỗ trực tiếp
Đánh giá giải thuật
Số phép so sánh ?
Số phép hoán vị ?
Độ phức tạp: O(n2)
Trang 10Chương 3 – Phần 2 – Sắp xếp Trương Thị Ngọc Phượng -
Trang 12Chương 3 – Phần 2 – Sắp xếp 12 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 14Chương 3 – Phần 2 – Sắp xếp 14 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 16Chương 3 – Phần 2 – Sắp xếp 16 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 17III PP chèn trực tiếp
Ý tưởng
Chèn 1 số vào dãy có thứ tự để có 1 dãy mới cũng
có thứ tự Quá trình như sau:
Xem a[1] là 1 dãy có thứ tự
Chèn a[2] vào dãy a[1] để có dãy 2 phần tử có thứ tự
Tiếp tục chèn các phần tử tiếp theo cho đến khi được dãy gồm tất cả các phần tử cần sắp xếp
Trang 18Chương 3 – Phần 2 – Sắp xếp Trương Thị Ngọc Phượng - CNTT -
Trang 20Chương 3 – Phần 2 – Sắp xếp 20 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 21III PP chèn trực tiếp
Đánh giá giải thuật
Số phép so sánh ?
Số phép gán ?
Trang 22Chương 3 – Phần 2 – Sắp xếp 22 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 23V PP nổi bọt
Ý tưởng
Phần tử nào “nhẹ” thì “nổi” lên phía đầu mảng
Phần tử “nhẹ” hơn thì “nổi” cao hơn (đứng ở vị trí nhỏ hơn trong mảng)
Ngược lại: Phần tử “nặng” sẽ “chìm” xuống cuối mảng
Trang 24Chương 3 – Phần 2 – Sắp xếp 24 Trương Thị Ngọc Phượng - CNTT - SPKT
V PP nổi bọt
Giải thuật
Bước 1: i = 1;
Bước 2: j = N;
Trong khi j > i thực hiện:
Nếu a[j] < a[j-1] thì HoánVị(a[j], a[j-1]);
j = j-1;
end;
Bước 3: i = i+1;
Nếu i > N-1 thì DỪNGNgược lại: Lặp lại Bước 2;
Trang 26Chương 3 – Phần 2 – Sắp xếp 26 Trương Thị Ngọc Phượng - CNTT - SPKT
Trang 27V PP nổi bọt
Đánh giá giải thuật
Không nhận diện được tình trạng đã có thứ tự hay
có thứ tự từng phần trong mảng
Phần tử nhỏ được đưa về đúng vị trí nhanh Phần
tử lớn được đưa về đúng vị trí chậm
Cải tiến: Thuật toán ShakerSort
• Lượt đi: Đẩy phẩn tử nhỏ về đầu mảng
• Lượt về: Đẩy phần tử lớn về cuối mảng
Trang 28Chương 3 – Phần 2 – Sắp xếp 28 Trương Thị Ngọc Phượng - CNTT - SPKT
V PP nổi bọt
Đánh giá giải thuật
Độ phức tạp: O(n2)
Trang 30Chương 3 – Phần 2 – Sắp xếp 30 Trương Thị Ngọc Phượng - CNTT - SPKT
Ý tưởng
Cho x=a[k] là giá trị của một phần tử bất kỳ trong dãy
Phân hoạch dãy ban đầu thành 2 phần
VI PP dựa trên phân hoạch
…Dãy con 1……. x ……Dãy con 2….
Các phần tử nhỏ hơn x Các phần tử lớn hơn hoac bang x
Tiếp tục phân hoạch các dãy con
DỪNG khi các dãy con đã có thứ tự
Trang 31VI PP dựa trên phân hoạch
Ví dụ
i=1
HV(a[1], a[6])j=6
i=2
HV(a[2], a[5])j=5
Trang 32Chương 3 – Phần 2 – Sắp xếp 32 Trương Thị Ngọc Phượng - CNTT - SPKT
VI PP dựa trên phân hoạch
Trang 33VI PP dựa trên phân hoạch
HoanVi(a[i], a[j]);
i++; j ;
} }while(i < j) if(left < j) QuickSort(a, left, j) ;
Trang 34Chương 3 – Phần 2 – Sắp xếp 34 Trương Thị Ngọc Phượng - CNTT - SPKT
VI PP dựa trên phân hoạch
Đánh giá giải thuật
Trường hợp tốt nhất?
Trang 36Chương 3 – Phần 2 – Sắp xếp 36 Trương Thị Ngọc Phượng - CNTT - SPKT
VII Bài tập
trình: C++, Pascal, Java các giải thuật sắp xếp
đã học.
sinh viên theo điểm trung bình
dãy số sau
2 23 9 0 5 4 -2 2 4 8