1. Trang chủ
  2. » Lịch sử lớp 11

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 7: Các phương pháp sắp xếp khác

10 8 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 372,65 KB

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

Nội dung

 V ới phương pháp sắp xếp chọn: thực hiện ít phép toán di chuy ển, nhưng sử dụng nhiều phép so. sánh[r]

Trang 1

Gi ảng viên: TS Ngo Huu Phuc

Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com

C ấu trúc dữ liệu và giải thuật

Bài 7 Các phương pháp sắp xếp khác

Trang 2

N ội dung:

7.1 ShellSort (8)

7.2 MergeSort (9)

7.3 BucketSort (5)

7.4 RadixSort (6)

1 Bucket sort.htm

2 Merge Sort.htm

3 Radix sort.htm

4 ShellSort.htm

5 Bài gi ảng của TS Nguyên Nam Hồng

Trang 3

 Phương pháp này được Donald Shell giới thiệu năm 1959.

 V ới phương pháp sắp xếp chèn: thực hiện ít phép toán so sánh, nhưng sử dụng nhiều phép di

chuy ển thừa.

 V ới phương pháp sắp xếp chọn: thực hiện ít phép toán di chuy ển, nhưng sử dụng nhiều phép so

sánh.

ể có phương pháp hiệu quả hơn không?

Trang 4

 Phương pháp sắp xếp ShellSort còn được gọi là

phương pháp sắp xếp giảm độ tăng - diminishing

increment sort.

 Phương pháp sử dụng một dãy tăng: h 1 , h 2 , h t

 Dãy t ăng được bắt đầu từ 1, tối đa đến N-1 (trong thực

t ế đến N/2) Chưa có đề xuất dãy như thế nào tốt nhất.

 Trong dãy này, không nên ch ọn các số là bội của nhau.

 Dãy này còn được gọi là dãy khoảng cách, ví dụ 1,3,5.

Trang 5

 Ví d ụ: với 13 phần tử, dãy khoảng cách là 1,3,5

STT 0 1 2 3 4 5 6 7 8 9 10 11 12

Ban

đầu 81 94 11 96 12 35 17 95 28 58 41 75 15

KC

= 5 35 17 11 28 12 41 75 15 96 58 81 94 95

KC

= 3 28 12 11 35 15 41 58 17 94 75 81 96 95

KC

= 1 11 12 15 17 28 35 41 58 75 81 94 95 96

Trang 6

#include <conio.h>

#define MAX 100

void inputdata(int* list,int n);

void printlist(int* list,int n);

void shellsort(int*list, int n, int *incs, int t);

void main() {

int list[MAX], n;

int incs[MAX], t;

printf("Nhap so phan tu cua mang:\n");

scanf("%d",&n);

inputdata(list,n);

printf("Mang da nhap:\n");

printlist(list,n);

printf("Nhap so phan tu cua mang khoang cach:");

scanf("%d",&t);

printf("Nhap gia tri cua mang khoang cach:");

scanf("%d",&incs[i]);

shellsort(list,n,incs,t);

printf("Mang da sap xep:\n");

printlist(list,n);

getch();

}

void inputdata(int* list,int n) {

int i;

printf("Nhap cac phan tu cua mang\n"); for(i=0;i<n;i++)

scanf("%d",&list[i]);

fflush(stdin);

}

Trang 7

void printlist(int* list,int n)

{

int i;

printf("Cac phan tu cua mang: \n");

for(i=0;i<n;i++)

printf("%d\t",list[i]);

printf("\n");

}

void shellsort(int*list, int n, int *incs, int t) {

inti,j,k,h;

inttemp;

for(k=t-1; k>0; k )

for(h=incs[k], i=h; i<n; i+=h) { temp=list[i];

j=i;

while(j>=h && list[j-h]>temp) {

list[j]=list[j-h]; j-=h;

} list[j]=temp;

}

Trang 8

 Tính hi ệu quả của thuật toán ShellSort?

 Ph ụ thuộc vào mảng khoảng cách.

 D ạng mặc định, do Shell đề xuất:

 h t = N/2, h k = h k+1 /2 …

 Độ phức tạp của thuật toán - O(N 2 )

Trang 9

 Dãy kho ảng cách của Hibbards:

 H k = 2 k -1 i.e 1, 3, 7,

 Độ phức tạp: O(N 1.5 )

 Dãy kho ảng cách của Sedgewicks:

 Có m ột số dạng được giới thiệu, nổi tiếng trong

đó có 2 dạng:

9 * 4 i – 9 * 2 i + 1, và 4 i – 3 * 2 i + 1

 Độ phức tạp: O(N 4/3 )

Trang 10

 Độ phức tạp của ShellSort trong trường hợp tồi nhất:

O(N 2 )

 Độ phức tạp của ShellSort trong trường hợp tốt nhất:

~ O(N)

 Độ phức tạp của ShellSort trong trường hợp trung

bình: ~ O(N 7/6 )

Ngày đăng: 09/03/2021, 05:58

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

w