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

Chương 3: KỸ THUẬT SẮP XẾP pptx

21 406 1
Tài liệu đã được kiểm tra trùng lặp

Đ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 21
Dung lượng 196,5 KB

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

Nội dung

Các phương pháp sắp xếp Sắp xếp trên dãy  Sắp xếp bằng phương pháp chọn trực tiếp Selection  Sắp xếp bằng phương pháp chèn trực tiếp Insertion  Sắp xếp bằng phương pháp đổi chỗ trực t

Trang 1

Môn: CẤU TRÚC DỮ LIỆU

Chương 3: KỸ THUẬT SẮP XẾP

Trang 2

NỘI DUNG CHƯƠNG 3

1. Khái quát về sắp xếp

2. Các phương pháp sắp xếp (Sắp xếp trên dãy)

Sắp xếp bằng phương pháp chọn trực tiếp (Selection)

Sắp xếp bằng phương pháp chèn trực tiếp (Insertion)

Sắp xếp bằng phương pháp đổi chỗ trực tiếp

Trang 3

1 Khái quát về sắp xếp

Sắp xếp là thao tác cần thiết thường được thực hiện trong quá

trình lưu trữ và quản lý dữ liệu.

Thứ tự dữ liệu có thể tăng hay giảm, tăng hay giảm thuật toán

sắp xếp là tương tự.

Hai nhóm giải thuật sắp xếp

Các giải thuật sắp xếp thứ tự nội (sx thứ tự trên mảng)

Các giải thuật sắp xếp thứ tự ngoại (sx thứ tự trên tập tin) Xem như mỗi phần tử dữ liệu được xem xét có một thành

phần khóa (Key) để nhận diện có kiểu dữ liệu T, các thành phần còn lại là thông tin (Info), như vậy mỗi phần tử có

cấu trúc như sau:

typedef struct DataElement

Trang 4

2 Sắp xếp trên dãy/mảng (tt)

2.1 Sắp xếp bằng phương pháp chọn trực tiếp (Selection

Sort)

Dãy a có N phần tử chưa có thứ tự Chọn phần tử nhỏ

nhất của dãy này đưa lên đầu dãy.

Sau lần chọn thứ nhất, còn lại N-1 phần tử chưa có thứ

tự Tiếp tục thực hiện, sau N-1 lần lựa chọn và đưa phần

tử nhỏ nhất lên trên dãy a có thứ tự tăng dần.

Để tìm phần tử nhỏ nhất của dãy dựa vào cách tìm kiếm

duyệt dãy tuần tự.

Trang 5

2 Sắp xếp trên dãy/mảng (tt)

2.1 (tt) Selection Sort: Thuật toán

B1: i=1

B2: Tìm phần tử nhỏ nhất a[min] trong dãy từ a[i] đến a[n]

B3: Hoán vị a[min] với a[i]

B4: Nếu i<n thì i=i+1 lặp lại B2

Ngược lại: Dừng

Trang 6

2 Sắp xếp trên dãy/mảng (tt)

2.1 (tt) Straight Selection Sort: Cài đặt thuật toán

void SelectionSort(int a[], int n)

min=j;

hoanvi(a[min],a[i]) }

}

Trang 7

2 Sắp xếp trên dãy/mảng (tt)

2.1 (tt) Straight Selection Sort: Cài đặt thuật toán

void hoanvi(int &a, int &b)

Trang 8

2 Sắp xếp trên dãy/mảng (tt)

2.1 (tt) Chọn trực tiếp (Straight Selection Sort)

Phân tích thuật toán:

Trong mọi trường hợp

Trong trường hợp trung bình

 Số phép gán Gavg = (Gmin+Gmax)/2

Trang 9

Giả sử ta có dãy a1,a2,…,a n trong đó i phần tử đầu tiên a1,a2,

…,a i-1 đã có thứ tự Ý tưởng của giải thuật là tìm cách

chèn phần tử a i vào vị trí thích hợp của đoạn đã sắp xếp

để có dãy a1,a2,…,a i có thứ tự.

Cho dãy a1,a2,…, a n Ta có thể xem như đã có đoạn gồm một

phần tử a1 đã sắp xếp Sau đó ta thêm a2 vào đoạn a1, sẽ

có đoạn a1,a2 sắp xếp Tương tự thêm a3 vào a1, a2…

tiếp tục cho đến khi thêm a n vào a1,a2,…,a n-1 Các bước

tiến hành như sau:

Trang 11

a[pos+1]=a[pos]; //dời sang phải pos ;

} a[pos+1]=x; // chèn x vào dãy

}

}

Trang 12

2 Sắp xếp trên dãy/mảng (tt)

2.3 Chèn trực tiếp (Straight Insertion Sort) (tt)

Phân tích thuật toán

Trong trường hợp trung bình

 Số phép gán Gavg = (Gmin+Gmax)/2

Trang 13

2 Sắp xếp trên dãy/mảng (tt)

2.3 Phương pháp đổi chỗ trực tiếp:

a Ý tưởng:

Xuất phát từ đầu dãy, tìm tất cả các phần tử nhỏ hơn phần tử

này, đổi chổ các phần tử tương ứng Lặp lại xử lý trên với các phần tử tiếp theo trong dãy

Trang 14

2 Sắp xếp trên dãy/mảng (tt)

2.3 Phương pháp đổi chỗ trực tiếp:

b Thuật toán:

B1: i=1; //bắt đầu từ đầu dãy

B2: j=i+1; //tìm các phần tử a[j]<a[i], j>i

B3:

Trong khi j<=n thực hiện

nếu a[j]<a[i]: hoán vị(a[j], a[i]);

j=j+1;

B4: i=i+1;

Nếu i<n: lặp lại B2

Ngược lại: dừng

Trang 16

2 Sắp xếp trên dãy/mảng

2.4 a Thuật toán sắp xếp nổi bọt (Bubble Sort)

Ý tưởng:

Đi từ cuối mảng đến đầu mảng, nếu phần tử ở dưới <

phần tử đứng trên nó thì sẽ được “đưa lên trên”.

Sau mỗi lần đi duyệt dãy, 1 phần tử sẽ được đưa lên đúng

chỗ của nó Đối với mảng M có N phần tử thì sau N-1 lần

đi duyệt dãy dãy M có thứ tự tăng.

Trang 17

2 Sắp xếp trên dãy/mảng (tt)

2.4 a Bubble Sort (tt) Thuật toán:

B1: i = 1; // lần xử lý đầu tiên

B2: j=n; //duyệt từ cuối dãy về I

Trong khi i<j thì thực hiện

Nếu a[j]<a[j-1] thì hoán vị(a[j],a[j-1])

j=j-1;

B3:i=i+1;

Nếu i>n-1 thì dừng; // đã xét hết dãy số

Ngược lại: Lặp lại B2

Trang 18

2 Sắp xếp trên dãy/mảng (tt)

2.4 a Bubble Sort (tt) Cài đặt thuật toán:

void Swap(int &X, int &Y)

{ int Temp = X;

X = Y;

Y = Temp;

}

void BubbleSort(int a[], int n)

{ for(int i =0; i<N-1; i++)

for(int j=n-1; j>i; j )

if (a[j] < a[j-1])

Swap(a[j], a[j-1]);

}

Trang 19

2 Sắp xếp trên dãy/mảng (tt)

2.4 a Bubble Sort (tt) Phân tích thuật toán:

Trong mọi trường hợp

Trang 20

2 Sắp xếp trên dãy/mảng (tt)

2.4 a Bubble Sort (tt) Nhận xét thuật toán:

Thuật toán đơn giản dễ cài đặt

Vói Bubble Sort, phần tử “nhỏ” ở dưới được đưa lên rất

nhanh nhưng phần tử “lớn” lại đi xuống chậm, không tận dụng được chiều ngược lại

Thuật toán không nhận diện được các phần tử ở 2 đầu

của mảng đã nằm đúng vị trí để giảm bớt quãng đường trong mỗi lần duyệt.

Trang 21

BÀI TẬP

Bài tập chương 3 (trang 84 - 85)

(Lý thuyết) Cho một mảng số nguyên bao gồm 20 phần tử

như sau 23 34 46 16 8 9 7 6 13 22 65 45 18

29 45 15 3 10 84 21

Tính số phép gán, số lần so sánh, hoán vị của mỗi thuật toán (Bubble Sort, QuickSort, Straight Selection Sort,

Straight Insertion Sort , Straight Merge Sort, Natural

Merge Sort) là bao nhiêu?

(Lý thuyết) Nếu đối với dãy có giá trị phần tử giữa dãy lớn

nhất, áp dụng phương pháp nào nhanh hơn QuickSort

hay Bubble Sort?

(VD: dãy : 23 4 6 77 45 5 6 7)

Cài đặt các giải thuật sắp xếp trong lý thuyết đối với các

dãy | mảng có giá trị giảm dần

Ngày đăng: 22/03/2014, 18:20

TỪ KHÓA LIÊN QUAN

w