Trong đó cấutrúc dữ liệu và giải thuật là một bộ môn giúp cho nhà lập trình xây dựng ýtưởng và thiết kế nên những phần mềm ứng dụng quan trọng, mà các giảithuật sắp xếp là một trong nhữn
Trang 1TRƯỜNG ĐẠI HỌC ĐỒNG THÁP
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CÔNG NGHỆ TIN HỌC
Đề tài : Cài đặt các giải thuật sắp xếp
Sinh viên thực hiện: Huỳnh Thị Minh Hằng Lớp: CĐTin08A
Giáo viên hướng dẫn: Nguyễn Thị Mỹ Dung
Đồng Tháp, 2009
Trang 2LỜI CẢM ƠN
Trước hết em xin chân thành cảm ơn các thầy cô giáo khoa CôngNghệ Thông Tin trường Đại học Đồng Tháp đã trang bị cho em nhữngkiến thức cơ bản cần thiết trong thời gian qua để em có thể thực hiện tốt
đồ án này
Em xin chân thành cảm ơn cô Nguyễn Thị Mỹ Dung đã tận tìnhgiúp đỡ và hướng dẫn em hoàn tất đồ án này Ngoài ra tôi cũng xin cảm
ơn tất cả bạn bè đã giúp đỡ tôi trong suốt quá trình thực hiện đồ án
Mặc dù đã rất cố gắng, nhưng trong khoảng thời gian cho phépcũng như những hạn chế về kiến thức nên cuốn đồ án này của em khôngthể tránh khỏi những thiếu sót Chính vì vậy, em rất mong nhận được sựgóp ý của các thầy cô giáo cũng như bạn bè có quan tâm đến lĩnh vựcđược trình bày trong cuốn đồ án này để em tích lũy thêm những kinhnghiệm cho mình nhằm phát huy những kiến thức được học để ứng dụngtrong công tác sau này
Một lần nữa em xin chân thành cảm ơn !
Sinh Viên Thực Hiện
Huỳnh Thị Minh Hằng
Trang 4PHẦN MỞ ĐẦU
1 Lý do chọn Đồ Án
Ngày nay, với sự phát triển vượt bậc của khoa học kỹ thuật Côngnghệ thông tin là một lĩnh vực nhiều ứng dụng thiết thực nhất trong mọi lĩnhvực của cuộc sống và xã hội chúng ta, đặc biệt nó là công cụ hỗ trợ đắc lựckhông thể thiếu trong công tác tổ chức, quản lý Dễ dàng thấy rằng cơ sở dữliệu là một trong ứng dụng quan trọng của công tác tin học hoá với những ứngdụng hữu ích cho mọi lĩnh vực của cuộc sống Nhờ vào công tác tin học hoá
mà công tác quản lý, tổ chức sắp xếp dữ liệu tỏ ra có hiệu quả, nhanh chóng,chính xác, lưu trữ gọn, bảo mật cao và dễ dàng Chính vì lẽ đó mà cơ sở dữliệu như là một giải pháp hữu hiệu nhất cho mọi cơ quan, tổ chức có thể làmviệc 1 cách khoa học và đạt năng suất cao
Trong 2 thập niên qua, với sự phát triển không ngừng của ngành côngnghệ thông tin, các ứng dụng của công nghệ thông tin ngày càng đi sâu vàocác lĩnh vực của cuộc sống nó giữ một vai trò cực kỳ quan trọng, góp phầngiúp nhà quản lý thực hiện chức năng quản lý một cách khoa học, chính xác
và hiệu quả Sự phát triển của các công nghệ phận mềm, trên các lĩnh vực như
đồ họa, ứng dụng văn phòng, tổ chức dữ liệu, thiết kế web v.v Trong đó cấutrúc dữ liệu và giải thuật là một bộ môn giúp cho nhà lập trình xây dựng ýtưởng và thiết kế nên những phần mềm ứng dụng quan trọng, mà các giảithuật sắp xếp là một trong những ứng dụng quan trọng của bộ môn cấu trúc dữliệu và giải thuật, nó giúp cho chúng ta có thể tổ chức sắp xếp dữ liệu theonhiều phương án khác nhau, thuận tiện cho việc truy xuất, kiểm tra, đối chiếu
dữ liệu, thế nên việc nghiên cứu các giải thuật sắp xếp để đưa vào ứng dụngtrong cuộc sống là một nhu cầu cấp thiết mà người lập trình phải tìm hiểu và
nghiên cứu Chính vì thế mà em chọn đề tài “ Cài đặt các giải thuật sắp xếp”
làm đồ án của mình và dùng ngôn ngữ hỗ trợ cài đặt là Visual Basic để thiết
kế bản Demo
Trang 52 Mục tiêu và nhiệm vụ
Đồ án này trong giới hạn kiến thức và thời gian, em chỉ tập trung nghiên cứu
các nội dung cơ bản sau
Nghiên cứu tổng quan về giải thuật
Nghiên cứu các thuật toán sắp xếp
Thiết kế các giải thuật sắp xếp
Hướng đến các kỹ thuật lập trình với mã nguồn mở và ngôn ngữ lậptrình C#
Áp dụng kết quả nghiên cứu làm một demo cài đặt các giải thật sắp xếp
2 Cấu trúc Đồ Án
Chương 1 TỔNG QUAN VỀ GIẢI THUẬT
2.1 Thuật toán (algorithm)
2.1.1 Khái niệm thuật toán
2.1.2 Các đặc trưng của thuật toán
Khái niệm giải thuậtCác đặc trưng của giải thuậtMột số giải thuật cơ bảnCHƯƠNG 2 : ỨNG DỤNG THUẬT TOÁN SẮP XẾP
3.1 CÁC THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
Trang 6Chương 1 TỔNG QUAN VỀ GIẢI THUẬT
1.1 Thuật toán
1.1.1 Khái niệm 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ập phân Sau đó, vào thế kỷ XVIII
algorism biến thành algorithm Với sự quan tâm ngày cà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, bao hàm cả cácthủ 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 được Output 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ầnthiết Thuật toán mô tả một thủ tục tính toán cụ thể để đạt được mối quan hệ
1.1.2 Các đặc trưng của thuật toán
Các thuật toán có một số tính chất chung, đó là:
Đầu vào (Input): Một thuật toán có các giá trị đầu vào từ một tập
xác định
Đầu ra (Output): Từ mỗi tập giá trị đầu vào, thuật toán sẽ tạo ra
các giá trị đầu ra Các giá trị đầu ra chính là nghiệm của bài toán
Trang 7 Tính xác định: Các bước của thuật toán phải được xác định một
cách chính xác
Tính đúng đắn: Một thuật toán phải cho các giá trị đầu ra đúng
đối với mỗi tập giá trị đầu vào
Tính hữu hạn: Một thuật toán phải tạo ra các giá trị đầu ra sau
một số hữu hạn (có thể rất lớn) các bước thực hiện đối với mỗitập đầu vào
Tính hiệu quả: Mỗi bước của thuật toán phải thực hiện được một
cách chính xác và trong một khoảng thời gian chấp nhận được
Tính tổng quát: Thuật toán cần phải áp dụng được cho mọi tập dữ
liệu đầu vào của bài toán, chứ không phải chỉ cho một tập đặcbiệt các giá trị đầu vào
1.2.1 Khái niệm giải thuật
Giải thuật là một hệ thống chặt chẽ và rõ ràng các quy tắc nhằm xácđịnh một dãy các thao tác trên những dữ liệu vào sao cho sau một số hữu hạnbước thực hiện các thao tác đó ta thu được kết quả của bài toán
Ví dụ 1: Giả sử có hai bình A và B đựng hai loại chất lỏng khác nhau, chẳnghạn bình A đựng rượu, bình B đựng nước mắm Giải thuật để hoán đổi (swap)chất lỏng đựng trong hai bình đó là:
Yêu cầu phải có thêm một bình thứ ba gọi là bình C
Bước 1: Đổ rượu từ bình A sang bình C
Bước 2: Đổ nước mắm từ bình B sang bình A
Bước 3: Đổ rượu từ bình C sang bình B
Ví dụ 2: Một trong những giải thuật tìm ước chung lớn nhất của hai số a và blà:
Bước 1: Nhập vào hai số a và b
Bước 2: So sánh 2 số a,b chọn số nhỏ nhất gán cho UCLN
Bước 3: Nếu một trong hai số a hoặc b không chia hết cho UCLN thìthực hiện bước 4, ngược lại (cả a và b đều chia hết cho UCLN) thì thựchiện bước 5
Bước 4: Giảm UCLN một đơn vị và quay lại bước 3
Bước 5: In UCLN - Kết thúc
Trang 81.2.2 Các đặc trưng của giải thuật
Tính kết thúc: Giải thuật phải dừng sau một số hữu hạn bước
Tính xác định: Các thao tác máy tính phải thực hiện được và các máytính khác nhau thực hiện cùng một bước của cùng một giải thuật phảicho cùng một kết quả
Tính phổ dụng: Giải thuật phải "vét' hết các trường hợp và áp dụng chomột loạt bài toán cùng loại
Tính hiệu quả: Một giải thuật được đánh giá là tốt nếu nó đạt hai tiêuchuẩn sau:
- Thực hiện nhanh, tốn ít thời gian
- Tiêu phí ít tài nguyên của máy, chẳng hạn tốn ít bộ nhớ
Giải thuật tìm UCLN nêu trên đạt tính kết thúc bởi vì qua mỗi lần thựchiện bước 4 thì UCLN sẽ giảm đi một đơn vị cho nên trong trường hợp xấunhất thì UCLN=1, giải thuật phải dừng Các thao tác trình bày trong các bước,máy tính đều có thể thực hiện được nên nó có tính xác định Giải thuật nàycũng đạt tính phổ dụng vì nó được dùng để tìm UCLN cho hai số nguyeêndương a và b bất kỳ Tuy nhiên tính hiệu quả của giải thuật có thể chưa cao;
cụ thể là thời gian chạy máy có thể còn tốn nhiều hơn một số giải thuật khác
mà chúng ta sẽ có dịp trở lại trong phần lập trình C
1.2.3 Ngôn ngữ biểu diễn giải thuật
Để biểu diễn giải thuật, cần phải có một tập hợp các ký hiệu dùng để biểudiễn, mỗi ký hiệu biểu diễn cho một hành động nào đó Tập hợp các ký hiệu
đó lại tạo thành ngôn ngữ biểu diễn giải thuật
1.2.3.1 Ngôn ngữ tự nhiên
Ngôn ngữ tự nhiên là ngôn ngữ của chúng ta đang sử dụng, chúng ta cóthể sử dụng ngôn ngữ tự nhiên để mô tả giải thuật giống như các ví dụ ở trên
Ví dụ: Ta có giải thuật giải phương trình bậc nhất dạng ax+b=0 như sau:
Bước 1: Nhận giá trị của các tham số a, b
Bước 2: Xét giá trị của a xem có bằng 0 hay không? Nếu a=0 thì làmbước 3, nếu a khác không thì làm bước 4
Bước 3: (a bằng 0) Nếu b bằng 0 thì ta kết luận phương trình vô sốnghiệm, nếu b khác 0 thì ta kết luận phương trình vô nghiệm
Bước 4: ( a khác 0) Ta kết luận phương trình có nghiệm x=-b/a
1.2.3.2 Ngôn ngữ sơ đồ (Lưu đồ)
Lưu đồ hay sơ đồ khối là một công cụ trực quan để diễn đạt các thuật toán.Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấpcác trường hợp và quá trình xử lý của thuật toán Phương pháp lưu đồ thường
Trang 9được dùng trong những thuật toán có tính rắc rối, khó theo dõi được quá trình
xử lý
Ðể biểu diễn thuật toán theo sơ đồ khối, ta phải phân biệt hai loại thao tác.Một thao tác là thao tác chọn lựa dựa theo một điều kiện nào đó Chẳng hạn :
thao tác"nếu a = b thì thực hiện thao tác B2, ngược lại thực hiện B4" là thao tác
chọn lựa Các thao tác còn lại không thuộc loại chọn lựa được xếp vào
loại hành động Chẳng hạn, "Chọn một hộp bất kỳ và để lên dĩa cân còn trống." là một thao tác thuộc loại hành động.
Thao tác chọn lựa (decision)
Thao tác chọn lựa được biểu diễn bằng một hình thoi, bên trong chứa biểu thức điều kiện
Thao tác xử lý (process)
Thao tác xử lý được biểu diễn bằng một hình chữ nhật, bên trong chứa nội dung xử lý
Ðường đi (route)
Khi dùng ngôn ngữ tự nhiên, ta mặc định hiểu rằng quá trình thực hiện
sẽ lần lượt đi từ bước trước đến bước sau (trừ khi có yêu cầu nhảy sang bước khác) Trong ngôn ngữ lưu đồ, do thể hiện các bước bằng hình vẽ và có thể đặt các hình vẽ này ở vị trí bất kỳ nên ta phải có phương pháp để thể hiện trình
tự thực hiện các thao tác
Hai bước kế tiếp nhau được nối bằng một cung, trên cung có mũi tên đểchỉ hướng thực hiện Chẳng hạn trong hình dưới, trình tự thực hiện sẽ là B1, B2, B3
ừ thao tác chọn lựa có thể có đến hai hướng đi, một hướng ứng với điều kiện thỏa và một hướng ứng với điều kiện không thỏa Do vậy, ta dùng hai cung xuất phát từ các đỉnh hình thoi, trên mỗi cung có ký hiệu Ð/Ðúng/Y/Yes
Trang 10để chỉ hướng đi ứng với điều kiện thỏa và ký hiệu S/Sai/N/No để chỉ hướng điứng với điều kiện không thỏa.
Ðiểm cuối (terminator)
Ðiểm cuối là điểm khởi đầu và kết thúc của thuật toán, được biểu diễn bằng hình ovan, bên trong có ghi chữ bắt đầu/start/begin hoặc kết thúc/end Ðiểm cuối chỉ có cung đi ra (điểm khởi đầu) hoặc cung đi vào (điểm kết thúc).Xem lưu đồ thuật toán giải phương trình bậc hai ở trên để thấy cách sử dụng của điểm cuối
Trang 11(connector)
Ðiểm nối được dùng để nối các phần khác nhau của một lưu đồ lại với nhau Bên trong điểm nối, ta đặt một ký hiệu để biết sự liên hệ giữa các điểm nối
Ðiểm nối sang trang (off-page connector)
Tương tự như điểm nối, nhưng điểm nối sang trang được dùng khi lưu
đồ quá lớn, phải vẽ trên nhiều trang Bên trong điểm nối sang trang ta cũng đặtmột ký hiệu để biết được sự liên hệ giữa điểm nối của các trang
Ở trên chỉ là các ký hiệu cơ bản và thường được dùng nhất Trong thực
tế, lưu đồ còn có nhiều ký hiệu khác nhưng thường chỉ dùng trong những lưu
đồ lớn và phức tạp
1.3 Một số giải thuật cơ bản
Ví dụ 1 : Viết chương trình cho phép nhập vào 2 giá trị a, b mang ýnghĩa là các hệ số a, b của phương trình bậc nhất Dựa vào các giá trị a, b đócho biết nghiệm của phương trình bậc nhất ax + b = 0
Mô tả giải thuật bằng ngôn ngữ tự nhiên:
Trang 12- Bước 1: Nhập 2 số a và b
- Bước 2: Nếu a = 0 thì thực hiện bước 3, ngược lại thực hiện bước 4
- Bước 3: Nếu b=0 thì thông báo phương trình vô số nghiệm và kết thúcchương trình, ngược lại thông báo phương trình vô nghiệm và kết thúc chươngtrình
- Bước 4: Thông báo nghiệm của phương trình là –b/a và kết thúc
Để giải quyết bài toán trên, chúng ta áp dụng phương pháp “thử vàsửa” Ban đầu giả sử a1 là số lớn nhất (được lưu trong giá trị max); sau đó lầnlượt xét các ai còn lại, nếu ai nào lớn hơn giá trị max thi lúc đó max sẽ nhậngiá trị là ai Sau khi đã xét hết các ai thì max chính là giá trị lớn nhất cần tìm
Mô tả giải thuật bằng ngôn ngữ tự nhiên:
- Bước 7: Nếu max < ai thì gán max=ai
- Bước 8: Tăng i lên một đơn vị và quay lại bước 5
- Bước 9: In max - kết thúc
1.3.1.Các cấu trúc suy luận cơ bản của giải thuật
Giải thuật được thiết kế theo ba cấu trúc suy luận cơ bản sau đây:
1.3.1.1.Tuần tự (Sequential):
Các công việc được thực hiện một cách tuần tự, công việc này nối tiếp côngviệc kia
1.3.1.2.Cấu trúc lựa chọn (Selection)
Lựa chọn một công việc để thực hiện căn cứ vào một điều kiện nào đó Cómột số dạng như sau:
- Cấu trúc 1: Nếu < điều kiện> (đúng) thì thực hiện <công việc>
- Cấu trúc 2: Nếu < điều kiện> (đúng) thì thực hiện <công việc 1>, ngược lại(điều kiện sai) thì thực hiện <công việc 2>
- Cấu trúc 3: Trường hợp < i> thực hiện <công việc i>
Trang 13Trong một số trường hợp người ta cũng có thể dùng các cấu trúc này để diễn
CHƯƠNG 2 : ỨNG DỤNG THUẬT TOÁN SẮP XẾP
2.1 KHÁI NIỆM GIẢI THẬT SẮP XẾP
Sắp xếp là một quá trình biến đổi một danh sách các đối tượng thànhmột danh sá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ìm kiếm dữ liệu Chẳng hạn, nếu danh sách đã được sắp xếptheo thứ tự tăng dần (hoặc giảm dầ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
Trang 14thườ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ắp xếp được chia làm 2 loại: sắp xếp trong và sắp xếpngoài Sắp xếp trong được thực hiện khi mà các đối tượng cần sắp xếp đượclư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, haycòn gọi là sắp xếp file Trong chương này, chúng ta trình bày các thuật toánsắp xếp đơn giản, các thuật toán này dòi hỏi thời gian O(n2) để sắp xếp mảng nđối tượng Sau đó chúng ta đưa ra các thuật toán phức tạp và tinh vi hơn,nhưng hiệu quả hơn, chỉ cần thời gian O(nlogn)
Mảng cần được sắp xếp có thể là mảng số nguyên, mảng các số thực,hoặc mảng các xâu ký tự Trong trường hợp tổng quát, các đối tượng cần đượcsắp xếp chứa một số thành phần dữ liệu, và ta cần sắp xếp mảng các đối tượng
đó theo một thành phần dữ liệu nào đó Thành phần dữ liệu đó được gọi làkhoá sắp xếp Chẳng hạn, ta có một mảng các đối tượng sinh viên, mỗi sinhviên gồm các thành phần dữ liệu: tên, tuổi, chiều cao,…, và ta muốn sắp xếpcác sinh viên theo thứ tự chiều cao tăng, khi đó chiều cao là khoá sắp xếp
Từ đây về sau, ta giả thiết rằng, mảng cần được sắp xếp là mảng các đốitượng có kiểu Item, trong đó Item là cấu trúc sau:
A[0].key <= A[1].key <= <= A[n-1].key
Trang 152.2 CÁC THUẬT TOÁN SẮP XẾP CƠ BẢN
Mục này trình bày các thuật toán sắp xếp đơn giản: sắp xếp lựa chọn(selection sort), sắp xếp xen vào (insertion sort), và sắp xếp nổi bọt (bubblesort) Thời gian chạy của các thuật toán này là O(n2), trong đó n là cỡ củamảng
Ta thấy rằng, nếu mảng có thứ tự, phần tử ai luôn là min(a i , a i+1 , , a n-1)
Ý tưởng của thuật toán chọn trực tiếp mô phỏng một trong những cách sắpxếp tự nhiên nhất trong thực tế: chọn phần tử nhỏ nhất trong N phần tử banđầu, đưa phần tử này về vị trí đúng là đầu dãy hiện hành; sau đó không quan
tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt
đầu từ vị trí thứ 2; lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện
hành chỉ còn 1 phần tử Dãy ban đầu có n phần tử, vậy tóm tắt ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện hành về vị
trí đúng ở đầu dãy Các bước tiến hành như sau :
Bước 1 : i = 0 ; // Bắt đầu từ phần tử đầu tiên
a[i] đến a[n]
Bước 3 : Hoán vị a[min] và a[i]
Bước 4 : | - Nếu i n-1 thì i = i+1 ( tăng i ) rồi lặp lại Bước 2
| - Ngược lại: Dãy đã được sắp xếp // n-1 phần tử đã nằm
đúng vị trí
Ví dụ
Cho dãy số a: 12 2 8 5 1 6 4 15
Trang 17int min; // chỉ số phần tử nhỏ nhất trong dãy hiện hành
for (int i=0; i<N-1 ; i++)
{
min = i;
for(int j = i+1; j <N ; j++)
if (a[j ] < a[min]) //So sánh 2 phần tử kế cận với nhau
min = j; // ghi nhận vị trí phần tử hiện nhỏ nhất
Hoanvi(a[min], a[i]);
}
}
Ðánh giá giải thuật
Ðối với giải thuật chọn trực tiếp, có thể thấy rằng ở lượt thứ i, bao giờ cũng cần (n-i) lần so sánh để xác định phần tử nhỏ nhất hiện hành Số lượng phép so sánh này không phụ thuộc vào tình trạng của dãy số ban đầu, do vậy trong mọi trường hợp có thể kết luận :
Số lần so sánh =
Số lần hoán vị (một hoán vị bằng 3 phép gán) lại phụ thuộc vào tình trạng ban đầu của dãy số, ta chỉ có thể ước lược trong từng trường hợp như sau :
Trườnghợp
Giả sử có một dãy a 1 , a 2 , ,a n trong đó i phần tử đầu tiên a 1 , a 2 , ,a i-1 đã
có thứ tự Ý tưởng chính của giải thuật sắp xếp bằng phương pháp chèn trực
tiếp là tìm cách chèn phần tử a i vào vị trí thích hợp của đoạn đã được sắp để
có dãy mới a 1 , a 2 , ,a i trở nên có thứ tự Vị trí này chính là vị trí giữa hai
phần tử a k-1 và a k thỏa a k-1 ? a i < a k (1?k?i)
Cho dãy ban đầu a 1 , a 2 , ,a n, ta có thể xem như đã có đoạn gồm một
phần tử a 1 đã được sắp, sau đó thêm a 2 vào đoạn a 1 sẽ có đoạn a 1 a 2 được sắp;
tiếp tục thêm a 3 vào đoạn a 1 a 2 để có đoạn a 1 a 2 a 3 được sắp; tiếp tục cho đến
Trang 18khi thêm xong a N vào đoạn a 1 a 2 a N-1 sẽ có dãy a 1 a 2 a N được sắp Các bướctiến hành như sau :
Bước 1 : i = 2; // giả sử có đoạn a[1]đã được sắp
đến a[i-1] để chèn a[i] vào
phải 1 vị trí để dành chổ cho a[i]
Bước 4 : a[pos] = x; // có đoạn a[1] a[i] đã được sắp
Trang 19
Dừng
Cài đặt thuật toán sắp xếp chèn trực tiếp thành hàm InsertionSort
void InsertionSort(int a[], int N )
{ int pos, i;
int x;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử
for(int i=1 ; i<N ; i++) //đoạn a[0] đã sắp