1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - Bùi Tiến Lên

50 88 0

Đ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 50
Dung lượng 713,71 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Các thuật toán sắp xếp cung cấp cho người đọc các kiến thức: Bài toán sắp xếp, các phương pháp sắp xếp, selection sort, insertion sort,.... Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

CÁC THUẬT TOÁN SẮP XẾP

Bùi Tiến Lên01/01/2017

Trang 2

Bài toán sắp xếp

là một trong những công việc phổ biến

Trang 3

Bài toán sắp xếp (cont.)

Định nghĩa 1

Cho một dãy a có n phần tử có thứ tự Hãy sắp xếp dãy

{a0,a1, ,an−1}theo thứ tự tăng dần

Spring 2017 Data structure & Algorithm 3

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 4

Các phương pháp sắp xếp

Có rất nhiều phương pháp sắp xếp khác nhau Mỗi phương pháp

có những đặc điểm riêng

Spring 2017 Data structure & Algorithm 4

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 5

SELECION SORT

Trang 6

Selection Sort

Ý tưởng của thuật toán như sau: Giả sử dãy a được chia làm hai

phần: phần trên trái đã sắp xếp s và phần bên phải chưa sắp

xếp u

1. s = ∅ và u = a

Spring 2017 Data structure & Algorithm 6

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 7

Selection Sort (cont.)

1 void SelectionSort(int a[], int n)

Trang 9

INSERTION SORT

Trang 10

Insertion Sort

Ý tưởng của thuật toán như sau: Giả sử dãy a được chia làm hai

phần: phần trên trái đã sắp xếp s và phần bên phải chưa sắp

xếp u

1. s = ∅ và u = a

Spring 2017 Data structure & Algorithm 10

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 11

Insertion Sort (cont.)

1 void InsertionSort(int a[], int n)

Trang 13

BUBBLE SORT

Trang 14

Bubble Sort

Thuật toán Bubble Sort là một trường hợp cụ thể của SelectionSort Giai đoạn tìm phần tử nhỏ nhất được thực hiện bằng cách

làm cho phần tử nhỏ nhất nổi ra phía đầu của dãy u

Spring 2017 Data structure & Algorithm 14

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 15

Bubble Sort (cont.)

Trang 17

SHELL SORT

Trang 18

Shell Sort

trước

Ý tưởng của thuật toán

a0,a0+h,a0+2h,

a1,a1+h,a1+2h,

a2,a2+h,a2+2h,

trực tiếp Insertion Sort

Spring 2017 Data structure & Algorithm 18

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 19

Shell Sort (cont.)

Thuật toán sẽ

ht= 1

Trang 21

HEAP SORT

Trang 22

Heap Sort

Định nghĩa 2

Cây heap là một cây nhị phân bộ phận hoàn chỉnh

các con của nó

con của nó

Spring 2017 Data structure & Algorithm 22

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 23

Biểu diễn Heap bằng mảng

Ta có thể biểu diễn cây nhị phân đầy đủ bằng mảng Ví dụ sau sẽminh họa cách biểu diễn một dãy gồm có 6 phần tử

{a0,a1,a2,a3,a4,a5} bằng cây nhị phân đầy đủ

Spring 2017 Data structure & Algorithm 23

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 24

Biểu diễn Heap bằng mảng (cont.)

Trang 25

Thao tác điều chỉnh cây nhị phân thành Heap

Xét một nút trên cây

thì tiến hành đổi chỗ với nút con có giá trị lớn nhất

Spring 2017 Data structure & Algorithm 25

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 26

Cài đặt hiệu chỉnh cây

Sau đây là một hàm cài đặt bằng C cho thao tác hiệu chỉnh câythành Heap

1 void Heapify(int a[], int n, int i)

Trang 27

Thuật toán Heap Sort

Thuật toán sắp xếp Heap Sort

chuyển một mảng bình thường thành một mảng Heap

đầu tiên của Heap

mảng HeapKhi xây dựng mảng Heap hãy lưu ý một số điểm sau

Trang 28

Thuật toán Heap Sort (cont.)

Chương trình 1:Sau đây là cài đặt thuật toán hàm xây dựng mảng Heap

1 void BuildHeap(int a[], int n)

Trang 29

Thuật toán Heap Sort (cont.)

Chương trình 2:Sau đây là cài đặt thuật toán sắp xếp

1 void HeapSort(int a[], int n)

Trang 31

MERGE SORT

Trang 32

Merge Sort

Hàm MergeSort nhận một danh sách có độ dài n và trả về một

danh sách đã được sắp xếp Hàm Merge nhận hai danh sách đã

được sắp L1 và L2 mỗi danh sách có độ dài n/2, trộn chúng lại với nhau để được một danh sách gồm n phần tử có thứ tự.

Trang 33

Minh họa hoạt động Merge Sort

Sắp xếp danh sách L gồm 8 phần tử {7, 4, 8, 9, 3, 1, 6, 2}

Spring 2017 Data structure & Algorithm 33

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 35

QUICK SORT

Trang 36

Quick Sort

Ý tưởng của thuật toán như sau: Đây cũng là một hướng tiếp cận

”chia nhỏ bài toán”

sao cho các phần tử thuộc dãy trái đều nhỏ hơn các phần tửthuộc dãy bên phải

Spring 2017 Data structure & Algorithm 36

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 37

Quick Sort (cont.)

Chương trình 3:Sau đây là cài đặt hàm Quick Sort

9 return Join(QuickSort(aleft), QuickSort(aright)

Trang 39

RADIX SORT

Trang 40

thứ i thành một nhóm đây là bước phân bố

nhất Quá trình phân bố-kết hợp được thực hiện cho đến khihết các chữ số

phải qua trái và Most significant digit đi từ trái qua phải

Spring 2017 Data structure & Algorithm 40

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 41

Cài đặt

1 void RadixSort(int a[], int n)

2 {

4 const int radix = 10;

5 const int digits = 6;

6 Queue < long > queues[radix];

7 for (i = 0, factor = 1; i < digits; factor *= radix

Trang 42

Minh họa thuật toán

Trang 43

Minh họa thuật toán (cont.)

Trang 44

Minh họa thuật toán (cont.)

Trang 45

Minh họa thuật toán (cont.)

Trang 47

COUNTING SORT

Trang 49

Cài đặt

1 const int RANGE = 256;

2 void countSort(int a[], int n)

Trang 50

Tài liệu tham khảo

Shell, D L (1959)

A high-speed sorting procedure

Communications of the ACM, 2(7):30–32.

Spring 2017 Data structure & Algorithm 50

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Ngày đăng: 11/01/2020, 17:44

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm