Shell sortGiới thiệu: – Được phát minh bởi Donald L.Shell vào năm 1959 – Shell sort là thuật toán hiệu quả nhất trong nhóm – Shell sort là sự cải tiến của Insertion sort dựa vào hai nhậ
Trang 1Please purchase a personal license.
Trang 2SHELL SORT
Trang 3Ôn t ậ p Insertion sort
Ý tưởng của thuật toán:
Trang 4Ôn t ậ p Insertion sort
Ví dụ: A = { 5 8 6 3 10 }
Ban đầu mảng A có {5} đã sắp xếp
1 Chèn 8 vào {5} {5,8}
2 Chèn 6 vào {5,8} {5,6,8}
3 Chèn 3 vào {5,6,8} {3,5,6,8}
4 Chèn 10 vào {3,5,6,8} {3,5,6,8,10}
Trang 5Ôn t ậ p Insertion sort
Code:
void Insertion_sort (int a[], int n)
for ( int k =i; (k>0)&&(a[k-1]>x);k )
a[k]=a[k-1];
a[k]=x;
} }
Trang 6Shell sort
Giới thiệu:
– Được phát minh bởi Donald L.Shell vào năm 1959 – Shell sort là thuật toán hiệu quả nhất trong nhóm
– Shell sort là sự cải tiến của Insertion sort dựa vào hai nhận xét sau đây:
• Insertion sort sẽ rất hiệu quả nếu dữ liệu đầu vào hầu như đã được sắp xếp (đã được xếp trong từng khoảng cục bộ)
• Insertion sort hoạt động kém hiệu quả vì nó di chuyển các giá trị phần tử mỗi lần chỉ một vị trí
Trang 7Shell sort
Ý tưởng thuật toán:
- Thuật toán Shell sort với số bước giảm dần
- Chọn khoảng cách giữa các bước d = n; d=(d+1)/2
- Phân chia dãy ban đầu thành các dãy con cách
nhau d khoảng
- Sắp xếp từng dãy con bằng Insertionsort
Trang 8Shell sort
Cài đặt thuật toán:
void ShellSort (int a[], int n)
{ int d=n;
while (d >=1)
for (int i=0;i<(n-d);i++)
} }
}
Trang 9Shell sort
Trang 10Shell sort