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

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]

(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 liệu giải thuật

(2)

Nội dung:

7.1 ShellSort (8) 7.2 MergeSort (9) 7.3 BucketSort (5) 7.4 RadixSort (6)

Tham khảo:

1. Bucket sort.htm 2. Merge Sort.htm 3. Radix sort.htm 4. ShellSort.htm

(3)

 Phương pháp Donald Shell giới thiệu

năm 1959.

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

chuyển thừa.

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

sánh.

(4)

 Phương pháp xếp ShellSort gọi

phương pháp xếp giảm độ tăng - diminishing increment sort.

 Phương pháp sử dụng dãy tăng: h1, h2, ht

 Dãy tăng 1, tối đa đến N-1 (trong thực tế đến N/2) Chưa có đề xuất dãy tốt nhất.

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

(5)

 Ví dụ: với 13 phần tử, dãy khoảng cách 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

(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);

(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;

(8)

 Tính hiệu thuật tốn ShellSort?  Phụ thuộc vào mảng khoảng cách.

 Dạng mặc định, Shell đề xuất:  ht = N/2, hk = hk+1/2 …

(9)

 Dãy khoảng cách Hibbards:  Hk = 2k-1 i.e 1, 3, 7,

 Độ phức tạp: O(N1.5)

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

 Có một số dạng giới thiệu, tiếng đó có dạng:

9 * 4i – * 2i + 1, 4i – * 2i + 1

(10)

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

O(N2)

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

~ O(N)

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

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

w