1.1. Đặt vấn đề
Sắp xếp là quá trình bố trí lại các phần tử của một tập đối tượng nào đó, theo một thứ tự ấn định. Như thứ tự tăng dân (hay giảm dần ) đối với một dãy số, thứ tự từ điển đối với các chữ,...
Trong cuộc sống thường xuyên xuất hiện tình huống đòi hỏi dữ liệu phải được sắp xếp theo một trật tự, như muốn tra từ điển, muốn tìm kiếm một số điện thoại, hay đơn giản hơn sắp xếp danh sách học sinh, sinh viên của một lớp học,…
Đối với các ứng dụng tin học, yêu cầu sắp xếp dữ liệu lưu trữ trong máy tính để tìm kiếm cho thuận lợi, sắp xếp các kết quả xử lý để in ra trên bảng biểu v.v...
Có hai phương pháp sắp xếp, phương pháp sắp xếp trong: Là các phương
pháp tác động trên một tập các bản ghi lưu trữ đồng thời ở bộ nhớ trong hay còn gọi là bảng (table). Phương pháp sắp xếp ngoài: Là các phương pháp tác động
trên một tập lớn các bản ghi lưu trữ ở bộ nhớ ngoài dưới dạng tệp (file). 1.2. Định nghĩa bài toán.
Bài toán được đặt ra ở đây là sắp xếp đối với một bảng gồm n bản ghi được lưu trữ ở bộ nhớ trong (sắp xếp trong). Mỗi bản ghi (đối tượng) bao gồm một số trường (thuộc tính) chứa dữ liệu có thể rất khác nhau, như bảng điểm của sinh viên một lớp bao gồm các bản ghi lưu trữ các thông tin về mã sinh viên, họ tên sinh viên, điểm môn 1, môn 2,…, điểm trung bình.
Tuy nhiên, không phải toàn bộ các trường dữ liệu trong bản ghi đều được xem xét đến trong quá trình sắp xếp, mà thông thường chỉ một trường nào đó (hoặc một vài trường nào đó – nhưng trường hợp này ta sẽ không đề cập đến )
89
được chú ý tới thôi và được gọi là trường khoá. Sắp xếp sẽ được tiến hành dựa vào giá trị của trường khoá này.
Một cách tổng quát, giải thuật sắp xếp bao gồm hai thao tác cơ bản là so sánh giá trị khóa của các bản ghi trong bảng và bố trí lại vị trí các bản ghi sao đúng thứ tự ấn định. Ở bảng điểm, với trường khóa là điểm trung bình khi sắp xếp ta so sánh các điểm trung bình của các bản ghi và bố trí lại các bản ghi sao cho đúng thứ tự tăng dần hay giảm dần của điểm trung bình. Với trường khóa là họ tên sinh viên, ta so sánh các chuỗi họ tên, nhưng thực chất của so sánh chuỗi ký tự là so sánh giá trị mã của ký tự tương ứng trong hai chuỗi với nhau, mà giá trị mã của ký tự cũng là một con số.
Để giúp làm đơn giản các giải thuật sắp xếp ta tạm coi bài toán sắp xếp trên một bảng gồm n bản ghi chỉ có một trường và đó là trường khóa. Như vậy, thao tác đổi chỗ bản ghi chỉ được thực hiện với trường khóa và giá trị khóa là các số nguyên, còn thứ tự sắp xếp là thứ tự tăng dần.
Thực tế có nhiều giải thuật sắp xếp, mỗi giải thuật đều được tối ưu trên một khía cạnh nào đó, có những giải thuật có những ưu điểm hơn những giải thuật khác. Trong khuôn khổ giáo trình sẽ giới thiệu 4 giải thuật sắp xếp đơn giản và một giải thuật sắp xếp nhanh (quick sort).