Tên đề tài: Xây dựng chương trình mô phỏng thuật toán sắp xếp nổi bọt, sắp xếp trộn, sắp xếp vun đống,sắp xếp nhanh. Yêu cầu: 1. Yêu cầu về kiến thức, kỹ năng: - Hiểu và viết được các giải thuật sắp xếp bằng phương pháp sắp xếp nổi bọt, sắp xếp trộn, sắp xếp vun đống, sắp xếp nhanh - Sử dụng được bộ công cụ phát triển Visual Studio 2005/2008/2010; - Biết lập trình bằng ngôn ngữ lập trình VB.NET/C# 2.Yêu cầu về sản phẩm, chương trình: - Chương trình viết băng ngôn ngữ VB.NETC; - Xây dựng được Form cho phép nhập vào dãy số có n số nguyên (Dùng mảng); - Sử dụng ComboBox để lựa chọn các phương pháp sắp xếp; - Quá trình sắp xếp được hiển thị trên một ListBox (Hiện thị từng bước sắp xếp).
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG
KHOA: CÔNG NGHỆ THÔNG TIN
NGUYỄN VĂN HƯỞNG
XÂY DỰNG CHƯƠNG TRÌNH
MÔ PHỎNG THUẬT TOÁN
SẮP XẾP NỔI BỌT, SẮP XẾP TRỘN, SẮP XẾP VUN ĐỐNG,
SẮP XẾP NHANH
ĐỒ ÁN HỌC PHẦN 1 CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN
HÀ NỘI, NĂM 2017
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG
KHOA: CÔNG NGHỆ THÔNG TIN
XÂY DỰNG CHƯƠNG TRÌNH
MÔ PHỎNG THUẬT TOÁN
SẮP XẾP NỔI BỌT, SẮP XẾP TRỘN, SẮP XẾP VUN ĐỐNG,
SẮP XẾP NHANH
ĐỒ ÁN HỌC PHẦN 1 CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN
Giáo viên hướng dẫn : Ngô Thị Lan
Họ tên sinh viên : Nguyễn Văn Hưởng
Mã sinh viên : 1501076
HÀ NỘI, NĂM 2017
Trang 3TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT-HUNG
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN HỌC PHẦN 1
Chuyên ngành: Công nghệ thông tin
Hệ đào tạo: Cao đẳng, Đại học
Đề tài số: 57
Tên đề tài: Xây dựng chương trình mô phỏng thuật toán sắp xếp nổi bọt, sắp xếp trộn, sắp xếp vun đống,sắp xếp nhanh.
Yêu cầu:
1 Yêu cầu về kiến thức, kỹ năng:
- Hiểu và viết được các giải thuật sắp xếp bằng phương pháp sắp xếp nổi bọt, sắp xếptrộn, sắp xếp vun đống, sắp xếp nhanh
- Sử dụng được bộ công cụ phát triển Visual Studio 2005/2008/2010;
- Biết lập trình bằng ngôn ngữ lập trình VB.NET/C#
2 Yêu cầu về sản phẩm, chương trình:
- Chương trình viết băng ngôn ngữ VB.NET/C#;
- Xây dựng được Form cho phép nhập vào dãy số có n số nguyên (Dùng mảng);
- Sử dụng ComboBox để lựa chọn các phương pháp sắp xếp;
- Quá trình sắp xếp được hiển thị trên một ListBox (Hiện thị từng bước sắp xếp)
3 Nộp kết quả
- Báo cáo (theo mẫu của bộ môn)
- Các công cụ phát triển, chương trình, file báo cáo
4 Các yêu cầu khác:
- Gửi lịch làm việc theo tuần cho giáo viên hướng dẫn
- Mỗi tuần phải liên hệ với giáo viên hướng dẫn ít nhất 2 lần qua email, hoặc gặp trực tiếp
Số lượng sinh viên tham gia tối đa: 1
Thời gian thực hiện: Theo lịch của bộ môn
Tài liệu tham khảo: [1] Giáo trình do giáo viên cung cấp
[2] Internet
Ngô Thị Lan
ĐT: 0982.010.510Email: onebit.lannt@gmail.com
Trang 4TRƯỜNG ĐHCN VIỆT – HUNG
KHOA:……….
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do – Hạnh phúc NHẬN XÉT ĐỒ ÁN HỌC PHẦN 1 Chuyên ngành : ………
(Nhận xét của GV hướng dẫn Nhận xét của GV phản biện )
Họ tên sinh viên: ……….………
Tên đề tài: ……… ………
………
Người nhận xét (Họ tên, học hàm, học vị): ………
Đơn vị công tác (Nếu có): ……… ………
Ý KIẾN NHẬN XÉT 1 Về nội dung & đánh giá thực hiện nhiệm vụ nghiên cứu của đề tài: ………
………
………
2 Về phương pháp nghiên cứu, độ tin cậy của các số liệu: ………
………
………
3 Về kết quả của đề tài: ………
………
………
4 Những thiếu sót và vấn đề cần làm rõ (Nếu có): ………
………
………
5 Ý kiến kết luận (Mức độ đáp ứng yêu cầu đối với đồ án học phần 1) ………
………
………
6 Câu hỏi người nhận xét dành cho học viên (Nếu có): ………
………
………
………
Mẫu DA02
Trang 6LỜI NÓI ĐẦU
Hiện nay trong hầu hết các hệ lưu trữ, quản lý dữ liệu, thao tác tìm kiếm thườngđược thực hiện nhiều nhất để khai thác thông tin một cách nhanh chóng (ví dụ như : tracứu từ điển, tìm sách trong thư viện ) và muốn việc tìm kiếm cách nhanh chóng thì dữliệu cần phải được sắp xếp sẵn, ngăn nắp theo một trật tự, hệ thống nhất định sẽ cho phépchúng ta tìm kiếm nhanh, sắp xếp có ý nghĩa rất lớn trong việc quản lí và lưu trữ
Do đó khi xây dựng một hệ quản lý thông tin trên máy tính, bên cạnh các thuậttoán tìm kiếm, các thuật toán sắp xếp dữ liệu cũng là một trong những chủ đề được quantâm hàng đầu
Hiện nay đã có nhiều giải thuật tìm kiếm và sắp xếp được xây dựng, mức độ hiệuquả của từng giải thuật còn phụ thuộc vào tính chất của cấu trúc dữ liệu cụ thể mà nó tácđộng đến mà ta lựa chọn phương pháp sắp xếp sao cho phù hợp Trong khoa học máy tính
và trong toán học, một thuật toán sắp xếp là một thuật toán sắp xếp các phần tử của mộtdanh sách (hoặc một mảng theo thứ tự tăng dần hoặc giảm dần) Người ta thường xéttrường hợp các phần tử cần sắp xếp là các số Hầu hết các bài toán đều có nhiều thuật toánkhác nhau để giải quyết chúng
Nội dung giới thiệu trình bày dưới đây là những thuật toán sắp xếp thông dụngnhất và đó cũng là nội dung mà em nghiên cứu trong đề tài này là:
Ngoài ra còn có nhiều thuật toán sắp xếp khác nữa như: Phương pháp sắp xếp cải tiến(Shellsort), sắp xếp đếm phân phối (distribution counting) Trong đề tài này chúng ta sẽđược lần lượt tìm hiểu khảo sát từng thuật toán trên Thuật toán Bubble sort là một trongnhững thuật toán đơn giản dễ cài đặt nhưng chi phí cao Các thuật toán Merge sort, Heapsort , Quick sort phức tạp hơn nhưng hiệu suất cao hơn Bubble Sort Các thuật toán trênđều có một điểm chung là đều được xây dựng dựa trên cơ sở so sánh giá trị của các phần
tử trong mảng (hay so sánh các khóa tìm kiếm) Khi xây dựng một thuật toán sắp xếp cầnchú ý tìm cách giảm thiểu những phép so sánh và đổi chổ không cần thiết để tăng hiệuquả của thuật toán
Mặt dù em đã rất cố gắng và nổ lực để làm đề tài này do kinh nghiệm còn hạn chế
và kiến thức em nắm chưa sâu nên em biết sẽ không tránh khỏi những thiếu sót Em rấtmong nhận được sự thông cảm và đóng góp của các Thầy, Cô để lần sau làm được tốthơn
Hoàn thành đề tài này là niềm vui lớn nên em rất là biết ơn cô Ngô Thị Lan đãhướng dẫn em tận tình trong suốt thời gian em làm bài Một lần nữa em xin gửi lời cám
ơn chân thành nhất đến cô
Sinh viên thực hiện:
Trang 7Nguyễn Văn Hưởng
Trang 8NHẬT KÝ THỰC HIỆN ĐỀ TÀI
Trang 9MỤC LỤC
LỜI NÓI ĐẦU i
MỤC LỤC i
MỞ ĐẦU 1
I Đặt vấn đề 1
II Mục tiêu nghiên cứu của đề tài 1
III Nhiệm vụ của đề tài 1
IV Kết quả đạt được của đề tài 1
V Bố cục của đề tài 2
CHƯƠNG 1 TÌM HIỂU VỀ THUẬT TOÁN VÀ SẮP XẾP 3
1.1 Thuật toán (giải thuật) – Algorithm 3
1.1.1 Định nghĩa thuật toán 3
1.1.2 Đặc trưng của thuật toán 4
1.1.3 Biểu diễn thuật toán 4
1.1.3.1 Mô tả các bước thực hiện 4
1.1.3.2 Sử dụng sơ đồ (lưu đồ) giải thuật (flowchart) 5
1.1.4 Độ phức tạp thuật toán - Algorithm Complexity 6
1.1.4.1 Các tiêu chí đánh giá thuật toán 6
1.2 Khái niệm về sắp xếp 7
1.3 Khái niệm nghịch thế 7
1.4 Các tiêu chuẩn đánh giá một thuật toán sắp xếp 8
CHƯƠNG 2 NỘI DUNG CỦA CÁC PHƯƠNG PHÁP SẮP XẾP 9
2.1 Phương pháp sắp xếp nổi bọt (Bubble sort) 9
2.1.1 Giải thuật 9
2.1.2 Đánh giá giải thuật 9
2.1.3 Ví dụ 10
2.2 Phương pháp sắp xếp trộn (Merge Sort) 11
2.2.1 Nguyên tắc sắp xếp bằng phép trộn 11
Trang 102.2.2 Giải thuật 11
2.2.3 Đánh giá giải thuật 12
2.2.4 Ví dụ 12
2.3 Phương pháp sắp xếp vun đống (Heap Sort) 13
2.3.1 Định nghĩa Heap 13
2.3.2 Giải thuật 14
2.3.3 Đánh giá giải thuật 14
2.3.4 Ví dụ 14
2.4 Phương pháp sắp xếp nhanh (Quick Sort) 16
2.4.1 Giải thuật 16
2.4.2 Đánh giá giải thuật 17
2.4.3 Ví dụ 18
CHƯƠNG 3 CHƯƠNG TRÌNH DEMO 19
3.1 Microsoft Visual Studio 2010 19
3.2 Tại sao sử dụng Windows Forms 19
3.3 Chương trình demo 20
3.4 Kết luận 22
3.4.1 Kết quả đạt được 22
3.4.2 Hạn chế 23
TÀI LIỆU THAM KHẢO 24
Trang 11Bài toán sắp xếp thường được xuất hiện thường xuyên nhất trong các ứng dụng tinhọc như trong ngôn ngữ lập trình C#,C++,Pascal ,với những yêu cầu, mục đích khácnhau thì sắp xếp dữ liệu lưu trữ trong máy tính theo cách và các bước khác nhau….Nóichung, dữ liệu có thể xuất hiện dưới nhiều dạng khác nhau và thường phải lưu trữ mộtkhối lượng dữ liệu đáng kể, nên việc xây dựng các giải thuật sắp xếp sẽ cho phép tìmkiếm nhanh sẽ có ý nghĩa rất lớn.
II Mục tiêu nghiên cứu của đề tài
Từ các vấn đề nêu trên giúp cho em hiểu rõ mục đích đề tài là để sắp xếp các dãy
số theo một trật tự, thứ tự tăng dần (hoặc là giảm dần) tùy theo vào yêu cầu của ngườimuốn sắp xếp, sắp xếp theo thự tự để giúp cho việc tìm kiếm được dễ dàng hơn, qua đó cóthể giúp hiểu rõ các ưu khuyết điểm của các phương pháp sắp xếp để so sánh tốc độ sắpxếp, từ đó để vận dụng các phương pháp đó trong việc sắp xếp theo yêu cầu cùa bài toánđặt ra một cách có hiệu quả
III Nhiệm vụ của đề tài
Tìm hiểu và vận dụng các lý thuyết cơ bản về một số phương pháp sắp xếp nhưphương pháp sắp xếp nổi bọt (Bubblesort) , sắp xếp trộn (Mergesort),, sắp xếp kiểu vunđống (Heapsort), sắp xếp nhanh (Quicksort) để cài đặt chương trình Demo, cho phép sắpxếp một dãy số đã cho tuỳ ý thành một dãy số có thứ tự theo các thuật toán sắp xếp vừanêu trên và hiển thị từng bước sắp xếp
IV Kết quả đạt được của đề tài
Hoàn tất tất cả các mục của phần mềm bao gồm:
+ Xây dựng được Form cho phép nhập vào dãy số có n số nguyên (dùng mảng)
+ Sử dụng ComboBox để lựa chọn các phương pháp sắp xếp
+ Quá trình sắp xếp được hiển thị trên một ListBox (Hiện thị từng bước sắp xếp)
Trang 12V Bố cục của đề tài
Đề tài gồm 3 chương như sau:
CHƯƠNG 1 : TÌM HIỂU VỀ THUẬT TOÁN VÀ SẮP XẾP CHƯƠNG 2 : NỘI DUNG CỦA CÁC PHƯƠNG PHÁP SẮP XẾP CHƯƠNG 3 : CHƯƠNG TRÌNH DEMO
Trang 13CHƯƠNG 1 TÌM HIỂU VỀ THUẬT TOÁN VÀ SẮP XẾP
Thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn của các chỉ thị hayphương cách được định nghĩa rõ ràng cho việc hoàn tất một số sự việc từ một trạng tháiban đầu cho trước; khi các chỉ thị này được áp dụng triệt để thì sẽ dẫn đến kết quả saucùng như đã dự đoán trước Nói cách khác, thuật toán là một bộ các quy tắc hay quy trình
cụ thể nhằm giải quyết một vấn đề trong một số bước hữu hạn, hoặc nhằm cung cấp mộtkết quả từ một tập hợp của các dữ kiện đưa vào
Sắp xếp là một quá trình biến đổi một danh sách các đối tượng thành một danhsách thoả mãn một thứ tự xác định nào đó Sắp xếp đóng vai trò quan trọng trong tìmkiếm dữ liệu Chẳng hạn, nếu danh sách đã được sắp xếp theo thứ tự tăng dần (hoặc giảmdần), ta có thể sử dụng kỹ thuật tìm kiếm nhị phân hiệu quả hơn nhiều tìm kiếm tuần tự…
Trong thiết kế thuật toán, ta cũng thường xuyên cần đến sắp xếp, nhiều thuật toán được
thiết kế dựa trên ý tưởng xử lý các đối tượng theo một thứ tự xác định Các thuật toán sắpxếp được chia làm 2 loại: sắp xếp trong và sắp xếp ngoài Sắp xếp trong được thực hiệnkhi mà các đối tượng cần sắp xếp được lưu ở bộ nhớ trong của máy tính dưới dạng mảng
Do đó sắp xếp trong còn được gọi là sắp xếp mảng Khi các đối tượng cần sắp xếp quálớn cần lưu ở bộ nhớ ngoài dưới dạng file, ta cần sử dụng các phương pháp sắp xếp ngoài,hay còn gọi là sắp xếp file
1.1 Thuật toán (giải thuật) – Algorithm
1.1.1 Định nghĩa thuật toán
Thuật ngữ “algorithm” (thuật toán hoặc còn gọi là giải thuật) được gọi theo tên nhàtoán học Ả rập thế kỷ IX al-Khowarizmi, người đã viết cuốn sách về các chữ số Hindu –
cơ sở của kí hiệu số thập phân hiện đại (xem [4], trang 118) Xuất xứ ban đầu là từalgorism, được dùng để chỉ các quy tắc thực hiện các phép tính số học trên các số thậpphân Sau đó, vào thế kỷ XVIII algorism biến thành algorithm Với sự quan tâm ngàycàng tăng đối với máy tính, khái niệm thuật toán đã được cho một ý nghĩa chung hơn, baohàm cả các thủ tục xác định để giải các bài toán, chứ không phải chỉ là thủ tục để thựchiện các phép tính số học
Thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xácđịnh sao cho sau khi thực hiện dãy các thao tác ấy, từ Input của bài toán ta nhận đượcOutput cần tìm
Cũng có thể xem thuật toán như một công cụ để giải quyết một bài toán cụ thể.Phát biểu bài toán sẽ chỉ định tổng quát mối quan hệ Input/Output cần thiết Thuật toán
mô tả một thủ tục tính toán cụ thể để đạt được mối quan hệ Input/Output đó
Trang 14Vào khoảng những năm 1930 - 1936, lần lượt các nhà toán học K.Gödel, S.Kleene, A Church, A Turing đã đề ra một số định nghĩa khác nhau cho khái niệm thuậttoán Trong số các định nghĩa toán học khác nhau (nhưng tương đương) về thuật toán, cáckhái niệm Máy Turing (1937) và Hàm đệ quy (1931-1936) được sử dụng rộng rãi hơn vì
có nhiều thuận tiện cho các nghiên cứu cả về lí thuyết lẫn thực hành
1.1.2 Đặc trưng của thuật toán
Tính đúng đắn: Thuật toán cần phải đảm báo cho một kết quả đúng sau khi thực
hiện đói với các bộ dữ liệu đầu vào Đây có thể nói là đặc trưng quan trọng nhất đối vớimột thuật toán
Tính dừng: thuật toán cần phải đảm bảo sẽ dừng sau một số hữu hạn bước.
Tính xác định: Các bước của thuật toán phải được phát biểu rõ ràng, cụ thể, tránh
gây nhập nhằng hoặc nhầm lẫn đối với người đọc và hiểu, cài đặt thuật toán
Tính hiệu quả: thuật toán được xem là hiệu quả nếu như nó có khả năng giải quyết
hiệu quả bài toán đặt ra trong thời gian hoặc các điều kiện cho phép trên thực tế đáp ứngđược yêu cầu của người dùng
Tính phổ quát: thuật toán được gọi là có tính phổ quát( phổ biến) nếu nó có thể giải
quyết được một lớp các bài toán tương tự
Ngoài ra mỗi thuật toán theo định nghĩa đều nhận các giá trị đầu vào được gọichung là các giá trị dữ liệu Input Kết quả của thuật toán( thường là một kết quả cụ thểnào đó tùy theo các bài toán cụ thể) được gọi là Output
1.1.3 Biểu diễn thuật toán
Thường có hai cách biểu diễn một thuật toán, cách thứ nhất là mô tả các bước thựchiện của thuật toán, cách thứ hai là sử dụng sơ đồ giải thuật
1.1.3.1 Mô tả các bước thực hiện
Để biểu diễn thuật toán người ta mô tả chính xác các bước thực hiện của thuậttoán, ngôn ngữ dùng để mô tả thuật toán có thể là ngôn ngữ tự nhiên hoặc một ngôn ngữlai ghép giữa ngôn ngữ tự nhiên với một ngôn ngữ lập trình nào đó gọi là các đoạn giả mãlệnh
Ví dụ: mô tả thuật toán tìm ước số chung lớn nhất của hai số nguyên.
Input: Hai số nguyên a, b
Output: Ước số chung lớn nhất của a, b
Thuật toán:
Bước 1: Nếu a=b thì USCLN(a, b)=a
Trang 151.1.3.2 Sử dụng sơ đồ (lưu đồ) giải thuật (flowchart)
Một trong những cách phổ biến để biểu diễn thuật toán là sử dụng sơ đồ thuật toán (Algorithm Flowchart)
Sơ đồ thuật toán sử dụng các ký hiệu hình khối cơ bản để tạo thành một mô tả mang tính hình thức (cách này rõ ràng hơn so với việc mô tả các bước thực hiện thuật toán) của thuật toán Chúng ta có thể hình dung việc sử dụng sơ đồ giải thuật để mô tả thuật toán giống như dùng các bản vẽ để mô tả cấu trúc của các tòa nhà
Các khối cơ bản của một sơ đồ thuật toán:
Hình 1.1.3.2 Các khối cơ bản của một sơ đồ thuật toán.
Khối 1 : Khối bắt đầu thuật toán, chỉ có duy nhất một đường ra ;
Khối 2 : Khối kết thúc thuật toán, có thể có nhiều đường vào;
Khối 3 : Thực hiện câu lệnh (có thể là một hoặc nhiều câu lệnh) ; gồm một đườngvào và một đường ra
Khối 4: Rẽ nhánh, kiểm tra biểu thức điều kiện (biểu thức Boolean), nếu biểu thứcđúng thuật toán sẽ đi theo nhánh Đúng (True), nếu biểu thức sai thuật toán sẽ đi theonhánh Sai (False).
Khối 5 : Các câu lệnh nhập và xuất dữ liệu
Trang 161.1.4 Độ phức tạp thuật toán - Algorithm Complexity
Thông thường để đánh giá mức độ tốt, xấu và so sánh các thuật toán cùng loại, có thể dựa trên hai tiêu chuẩn:
+ Thuật toán đơn gàn, dễ hiểu, dễ cài đặt
+ Dựa vào thời gian thực hiện và tài nguyên mà thuật toán sử dụng để thực hiện trên các bộ dữ liệu
Trên thực tế các thuật toán hiệu quả thì không dễ hiểu, các cài đặt hiệu quả cũng không dễ dàng thực hiện và hiểu được một cách nhanh chóng Và một điều có vẻ nghịch
lý là các thuật toán càng hiệu quà thì càng khó hiểu, cài đặt càng phức tạp lại càng hiệu quả (không phải lúc nào cũng đúng) Vì thế để đánh giá và so sánh các thuật toán người tathường dựa trên độ phức tạp về thời gian thực hiện của thuật toán, gọi là độ phức tạp thuật
toán (algorithm complexity) Về bản chất độ phức tạp thuật toán là một hàm ước lượng
(có thể không chính xác) số phép tính mà thuật toán cần thực hiện (từ đó dễ dàng suy ra thời gian thực hiện của thuật toán đối với một bộ dữ liệu input có kích thước N N có thể
là số phần tử của mảng trong trường hợp bài toán sắp xếp hoặc tìm kiếm, hoặc có thể là
độ lớn của số trong bài toán kiểm tra số nguyên tố chẳng hạn
1.1.4.1 Các tiêu chí đánh giá thuật toán
Khi xem xét đến độ phức tạp tính toán của thuật toán ta phải xem xét đến độ phức
tạp thời gian và độ phức tạp không gian.
Độ phức tạp không gian gắn liền với cấu trúc dữ liệu cụ thể được dùng để thực
hiện thuật toán
Độ phức tạp thời gian: Độ phức tạp thời gian của một thuật toán có thể biểu diễn
qua số phép toán thực hiện thuật toán đó khi các giá trị đầu vào có kích thước xác định
Độ phức tạp trong trường hợp xấu nhất là trường hợp phải dùng tối đa các phéptoán để giải bài toán theo thuật toán đang xét
Độ phức tạp trong trường hợp trung bình, trong trường hợp này ta phải đi tìm sốtrung bình các phép toán để giải bài toán trên toàn bộ các giá trị đầu vào có kích thước đãcho
Các thuật ngữ thường dùng cho độ phức tạp của thuật toán:
Trang 17O(n!) Độ phức tạp giai thừa
Bảng 1.1.4.2 Các thuật ngữ thường dùng cho độ phức tạp của thuật toán
1.2 Khái niệm về sắp xếp
Sắp xếp được xem là một trong những lĩnh vực nghiên cứu cổ điển của khoa họcmáy tính Trước khi đi vào các thuật toán chi tiết chúng ta cần nắm vững một số kháiniệm cơ bản sau:
thoại của một người
Sắp xếp (sorting) là một quá trình xếp đặt các bản ghi của một file theo một thứ tựnào đó Việc xếp đặt này được thực hiện dựa trên một hay nhiều trường nào đó, và cácthông tin này được gọi là khóa xắp xếp (key) Thứ tự của các bản ghi được xác định dựatrên các khóa khác nhau và việc sắp xếp đối được thực hiện đối với mỗi khóa theo các thứ
tự khác nhau Chúng ta sẽ tập trung vào các thuật toán xắp xếp và giả sử khóa chỉ gồm 1trường duy nhất Hầu hết các thuật toán xắp xếp được gọi là các thuật toán xắp xếp sosánh: chúng sử dụng hai thao tác cơ bản là so sánh và đổi chỗ (swap) các phần tử cần sắpxếp
Các bài toán sắp xếp đơn giản được chia làm hai dạng:
Sắp xếp trong (internal sorting): Dữ liệu cần sắp xếp được lưu đầy đủ trong bộ nhớ trong
để thực hiện thuật toán sắp xếp
Sắp xếp ngoài (external sorting): Dữ liệu cần sắp xếp có kích thước quá lớn và không thểlưu vào bộ nhớ trong để sắp xếp, các thao tác truy cập dữ liệu cũng mất nhiều thời gianhơn
Khi khảo sát bài toán sắp xếp, ta sẽ phải làm việc nhiều với một khái niệm gọi là nghịchthế
1.3 Khái niệm nghịch thế
Xét một mảng các số a0,a1, …, an Nếu có i < j và ai > aj, thì ta gọi đó là một nghịch thế
Ví dụ : Mảng chưa sắp xếp sẽ có nghịch thế
đến a1, a2