Chương 3: KỸ THUẬT SẮP XẾP
Số trang: 21
Loại file: ppt
Dung lượng: 196.50 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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ự.
Nội dung trích xuất từ tài liệu:
Chương 3: KỸ THUẬT SẮP XẾPMôn: CẤU TRÚC DỮ LIỆU Chương 3: KỸ THUẬT SẮP XẾP 1 NỘI DUNG CHƯƠNG 3 Khái quát về sắp xếp1. Các phương pháp sắp xếp (Sắp xếp trên dãy)2. 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 (Exchange) Sắp xếp bằng phương pháp trộn (Merge) Các phương pháp sắp xếp (Sắp xếp trên tập tin)1. Sắp xếp tập tin bằng phương pháp trộn Sắp xếp tập tin theo chỉ mục BÀI TẬP 2 1. Khái quát về sắp xếpSắ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{ T Key; InfoData Info;} DataType;Để đơn giản, quan tâm thành phần dữ liệu chỉ là khóa nh ận di ện 3 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ự. 4 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Selection Sort: Thuật toánB1: i=1B2: 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 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Straight Selection Sort: Cài đặt thuật toánvoid SelectionSort(int a[], int n){ int i,j,min; for(i=0; i 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Straight Selection Sort: Cài đặt thuật toánvoid hoanvi(int &a, int &b) { int temp; temp=a; a=b; b=temp; } 7 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 Số phép so sánh S = (N-1) + (N-2) +… + 1 = ½N(N-1) Số phép hoán vị H = N-1 Trong trường hợp tốt nhất Số phép gán Gmin = 2 x (N-1) Trong trường hợp xấu nhất Số phép gán Gmax = 2 x [(N-1) + (N-2) +… + 1] Trong trường hợp trung bình Số phép gán Gavg = (Gmin+Gmax)/2 8 2. Sắp xếp trên dãy/mảng (tt)2.2. Sắp xếp bằng phương pháp chèn trực tiếp (Insertion Sort)a. thuật toán:Giả sử ta có dãy a1,a2,…,an trong đó i phần tử đầu tiên a1,a2,…,ai-1 đã có thứ tự. Ý tưởng của giải thuật là tìm cách chèn phần tử ai vào vị trí thích hợp của đoạn đã sắp xếp để có dãy a1,a2,…,ai có thứ tự.Cho dãy a1,a2,…, an . 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 an vào a1,a2,…,an-1. Các bước tiến hành như sau: 9 2. Sắp xếp trên dãy/mảng (tt) //giả sử a[1] đã được sắpB1: i=2;B2: x=a[i] Tìm vị trí pos thích hợp trong đoạn a[1] đến a[i-1] để chèn a[i] vàoB3: Dời chổ các phần tử từ a[pos] đến a[i-1] sang phải một vị trí để dành chổ cho a[i] //có đoạn a[1],…,a[i] đã được sắpB4: a[pos]=x;B5: i=i+1 Nếu i 2. Sắp xếp trên dãy/mảng (tt)b. Ví dụ minh hoạ: vd-t50c. Cài đặt:Void intersectionsort( int a[], int n){ int i,pos; int x; for(i=1;i=0)&&(a[pos]>x)) { a[pos+1]=a[pos]; //dời sang phải pos--; } a[pos+1]=x; // chèn x vào dãy }} 11 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 tốt nhất Số phép gán Gmin = 2 × (N-1) Số phép so sánh Smin = 1 + 2 + … +(N-1) = N ×(N-1)/2 Số phép hoán vị Hmin = 0 Trong trường hợp xấu nhất Số phép gán Gmax = [2 × (N-1)] + [1+2+…+(N-1)] Số phép so sánh Smax = (N-1) Số phép hoán vị Hmax = 0 Trong trường hợp trung bình Số phép gán Gavg = (Gmin+Gmax)/2 Quá trình tìm vị trí chèn của phần t ử thứ K+1 và quá trình d ời 12 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 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:b. Thuật toán:B1: i=1; //bắt đầu từ đầu dãyB2: j=i+1; //tìm các phần tử a[j]iB3: Trong khi j 2. Sắp xếp trên dãy/mảng (tt)2.3. Phương pháp đổi chỗ trực tiếp:c. Ví dụ minh hoạ:d. Cài đặt:Void interchangesort (int a[], int n){ int i,j; for( i=0; i 2. Sắp xếp trên dãy/mảng2.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 ...
Nội dung trích xuất từ tài liệu:
Chương 3: KỸ THUẬT SẮP XẾPMôn: CẤU TRÚC DỮ LIỆU Chương 3: KỸ THUẬT SẮP XẾP 1 NỘI DUNG CHƯƠNG 3 Khái quát về sắp xếp1. Các phương pháp sắp xếp (Sắp xếp trên dãy)2. 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 (Exchange) Sắp xếp bằng phương pháp trộn (Merge) Các phương pháp sắp xếp (Sắp xếp trên tập tin)1. Sắp xếp tập tin bằng phương pháp trộn Sắp xếp tập tin theo chỉ mục BÀI TẬP 2 1. Khái quát về sắp xếpSắ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{ T Key; InfoData Info;} DataType;Để đơn giản, quan tâm thành phần dữ liệu chỉ là khóa nh ận di ện 3 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ự. 4 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Selection Sort: Thuật toánB1: i=1B2: 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 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Straight Selection Sort: Cài đặt thuật toánvoid SelectionSort(int a[], int n){ int i,j,min; for(i=0; i 2. Sắp xếp trên dãy/mảng (tt)2.1. (tt) Straight Selection Sort: Cài đặt thuật toánvoid hoanvi(int &a, int &b) { int temp; temp=a; a=b; b=temp; } 7 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 Số phép so sánh S = (N-1) + (N-2) +… + 1 = ½N(N-1) Số phép hoán vị H = N-1 Trong trường hợp tốt nhất Số phép gán Gmin = 2 x (N-1) Trong trường hợp xấu nhất Số phép gán Gmax = 2 x [(N-1) + (N-2) +… + 1] Trong trường hợp trung bình Số phép gán Gavg = (Gmin+Gmax)/2 8 2. Sắp xếp trên dãy/mảng (tt)2.2. Sắp xếp bằng phương pháp chèn trực tiếp (Insertion Sort)a. thuật toán:Giả sử ta có dãy a1,a2,…,an trong đó i phần tử đầu tiên a1,a2,…,ai-1 đã có thứ tự. Ý tưởng của giải thuật là tìm cách chèn phần tử ai vào vị trí thích hợp của đoạn đã sắp xếp để có dãy a1,a2,…,ai có thứ tự.Cho dãy a1,a2,…, an . 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 an vào a1,a2,…,an-1. Các bước tiến hành như sau: 9 2. Sắp xếp trên dãy/mảng (tt) //giả sử a[1] đã được sắpB1: i=2;B2: x=a[i] Tìm vị trí pos thích hợp trong đoạn a[1] đến a[i-1] để chèn a[i] vàoB3: Dời chổ các phần tử từ a[pos] đến a[i-1] sang phải một vị trí để dành chổ cho a[i] //có đoạn a[1],…,a[i] đã được sắpB4: a[pos]=x;B5: i=i+1 Nếu i 2. Sắp xếp trên dãy/mảng (tt)b. Ví dụ minh hoạ: vd-t50c. Cài đặt:Void intersectionsort( int a[], int n){ int i,pos; int x; for(i=1;i=0)&&(a[pos]>x)) { a[pos+1]=a[pos]; //dời sang phải pos--; } a[pos+1]=x; // chèn x vào dãy }} 11 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 tốt nhất Số phép gán Gmin = 2 × (N-1) Số phép so sánh Smin = 1 + 2 + … +(N-1) = N ×(N-1)/2 Số phép hoán vị Hmin = 0 Trong trường hợp xấu nhất Số phép gán Gmax = [2 × (N-1)] + [1+2+…+(N-1)] Số phép so sánh Smax = (N-1) Số phép hoán vị Hmax = 0 Trong trường hợp trung bình Số phép gán Gavg = (Gmin+Gmax)/2 Quá trình tìm vị trí chèn của phần t ử thứ K+1 và quá trình d ời 12 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 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:b. Thuật toán:B1: i=1; //bắt đầu từ đầu dãyB2: j=i+1; //tìm các phần tử a[j]iB3: Trong khi j 2. Sắp xếp trên dãy/mảng (tt)2.3. Phương pháp đổi chỗ trực tiếp:c. Ví dụ minh hoạ:d. Cài đặt:Void interchangesort (int a[], int n){ int i,j; for( i=0; i 2. Sắp xếp trên dãy/mảng2.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 ...
Tìm kiếm theo từ khóa liên quan:
cấu trúc dữ liệu và giải thuât bài giảng cấu trúc dữ liệu và giải thuât tài liệu cấu trúc dữ liệu và giải thuât giáo trình cấu trúc dữ liệu và giải thuât cấu trúc dữ liệu động kỹ thuật sắp xếpTài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 319 0 0 -
Giáo trình cấu trúc dữ liệu và giải thuât part 2
16 trang 166 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 163 0 0 -
3 trang 162 3 0
-
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 2 - Trần Hạnh Nhi
123 trang 156 0 0 -
10 trang 138 0 0
-
57 trang 134 1 0
-
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 125 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Một số giải thuật sắp xếp và tìm kiếm
29 trang 120 0 0 -
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 1 - Trần Hạnh Nhi
98 trang 116 0 0