1. Trang chủ
  2. » Giáo án - Bài giảng

Do an giai thuat sap xep

39 495 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 353,5 KB

Nội dung

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 1

TRƯỜ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 2

LỜ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 4

PHẦ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 5

2 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 6

Chươ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 8

1.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 13

Trong 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 14

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ắ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 15

2.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 17

int 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 18

khi 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

Ngày đăng: 30/06/2014, 21:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w