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 tăng dần (increasing), hoặc giảm dần (decreasing). Bài toán sắp xếp xuất hiện trong bất kỳ lĩnh vực nào của tin học, phục vụ những ứng dụng riêng của hệ thống, từ
những ứng dụng ẩn bên trong của Hệđiều hành như bài toán điều khiển quá trình ( Proccess Control Problem), bài toán lập lịch cho CPU (CPU Schedulling), bài toán quản lý bộ nhớ
(Memory Management) . . . cho tới những ứng dụng thông thường như sắp xếp dãy số, sắp xếp các từ, các câu, các bản ghi theo thứ tựđều có liên quan tới quá trình sắp xếp.
Tập đối tượng cần được sắp xếp có thể xuất hiện dưới nhiều dạng khác nhau, các đối tượng đó có thể là các đối tượng dữ liệu kiểu cơ bản như sắp xếp dãy số, sắp xếp kí tự, sắp xếp string hoặc là các đối tượng tổng quát như một cấu trúc bao gồm một số trường thông tin phản ánh đối tượng. Chúng ta qui ước đối tượng cần được sắp xếp là các cấu trúc, và quá trình sắp xếp được thực hiện trên một trường nào đó gọi là trường khoá.
Có nhiều thuật toán sắp xếp khác nhau để sắp xếp các đối tượng. Tuy nhiên, để lựa chọn một thuật toán sắp xếp tốt, chúng ta cần đánh giá thuật toán theo các hai khía cạnh: đó là sự chiếm dụng bộ nhớ khi áp dụng giải thuật và thời gian thực hiện giải thuật. Đối với thời gian thực hiện giải thuật, chúng ta cũng cần đánh giá chi phí thời gian trong trường hợp tốt nhất, trung bình và xấu nhất đối với nguồn dữ liệu vào. Chúng ta cũng chỉđưa ra những
kỹ thuật lập trình, thông qua giải thuật và kết quả đánh giá thuật toán mà không chứng minh lại những kết quảđó, vì nó đã được trình bày trong một chuyên đề khác của tin học.
Những thuật toán sắp xếp và tìm kiếm sẽđược bàn luận trong chương này bao gồm các thuật toán sắp xếp đơn giản như : chọn trực tiếp (Selection), thuật toán sủi bọt (Bubble), thuật toán chèn trực tiếp (Insertion), các thuật toán sắp xếp nhanh như quick sort, merge sort, heap sort. Trong tất cả các ví dụ minh họa cho giải thuật sắp xếp và tìm kiếm, chúng ta sẽ sử dụng tập các số nguyên dưới đây làm ví dụ sắp xếp. Dãy số nguyên này sẽ không
được nhắc lại trong khi giải thích mỗi thuật toán sắp xếp.
42 23 74 11 65 58 94 36 99 87