Tải bản đầy đủ (.ppt) (79 trang)

Báo cáo Các thuật toán sắp xếp.PPT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.49 MB, 79 trang )


Báo cáo:
Báo cáo:
Các thuật toán
Các thuật toán
sắp xếp
sắp xếp


Sinh viên thực hiện:
Nguyễn Đình Liêm
Nguyễn Thành Nhân
Lớp Toán 3B

Nội dung báo cáo
Nội dung báo cáo

Các thuật toán sắp xếp nội:
+ Shell sort.
+ Heap sort.
+ Merge sort.

Thuật toán sắp xếp ngoại:
+ Sắp xếp thứ tự trên tập tin


Ý tưởng
Ý tưởng
Chia dãy thành [n/2] nhóm (dãy con) xen kẽ nhau,
sắp thứ tự trên từng nhóm riêng biệt sẽ đưa các
phần tử về thứ tự đúng tương đối (chỉ đúng so


với các phần tử trong nhóm, có thể chưa đúng
với dãy ban đầu)
Sau đó chia thành [n/2]-2 nhóm xen kẽ, sắp thứ tự
trên từng nhóm …
Làm như trên cho đến khi còn 3 nhóm hoặc 2
nhóm thì chia tiếp thành 1 nhóm
Sắp xếp thứ tự trên nhóm cuối cùng sẽ cho ta kết
quả




Ví dụ
Ví dụ
0 1 2 3 4 5
0 1 2 3 4 5
a[0]=5; a[1]=4; a[2]=9; a[3]=6; a[4]=9; a[5]=7;
a[0]=5; a[1]=4; a[2]=9; a[3]=6; a[4]=9; a[5]=7;
5 4 9 6 0
7

Ví dụ
Ví dụ
0 1 2 3 4 5
Step=0; k=[n/2]=3;
Len=h[0]=k=3; i=len=3
X=a[3]=6; j=0;
5 4 9 6 0
7


Ví dụ
Ví dụ
0 1 2 3 4 5
Step=0; k=[n/2]=3;
Len=h[0]=k=3; i=len=3
X=a[3]=6; j=0;
5 4 9 6 0
7

Ví dụ
Ví dụ
0 1 2 3 4 5
i=4
X=a[4]=0; j=0;
5 4 9 6 0
7

Ví dụ
Ví dụ
0 1 2 3 4 5
i=4
X=a[4]=0; j=0;
5 4 9 6
0
7

Ví dụ
Ví dụ
0 1 2 3 4 5
i=5;

X=a[5]=7; j=1;
5 0 9 6 4
7

Ví dụ
Ví dụ
0 1 2 3 4 5
i=5;
X=a[5]=7; j=1;
5 0 9 6 4
7

Ví dụ
Ví dụ
0 1 2 3 4 5
5 0 7 6 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
Step=1; len=h[1]=1;
i=1; x=a[1]=0; j= -1;
5 0 7 6 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
Step=1; len=h[1]=1;

i=1; x=a[1]=0; j= -1;
5
0
7 6 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
i=2;
X=a[2]=7; j=1;
0 5 7 6 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
i=3;
X=a[3]=6; j=1;
0 5 7 6 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
i=3;
X=a[3]=6; j=1;
0 5 7
6
4

9

Ví dụ
Ví dụ
0 1 2 3 4 5
i=4;
X=a[4]=4; j=1;
0 5 6 7 4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
i=4;
X=a[4]=4; j=0;
0 5 6 7
4
9

Ví dụ
Ví dụ
0 1 2 3 4 5
Dãy đã sắp xếp xong
0 4 5 6 7
9

Thuật toán
Thuật toán

B1: Cho step = 0;


B2: len=h[step];

B3: i=len;

B4: x=a[i]; j=i-len;

B5: a[j+len]=a[j];

B6: j=j-len;

B7: Lặp lại B5,B6 đến khi x>=a[j] hoặc j<0;

B8: a[j+len]=x;

B9: tăng i 1 đơn vị

B10: Lặp lại B4,5,6,7,8,9 đến khi i=N-1;

B11: Tăng step 1 đơn vị

B12: Lặp lại B2,3,4,5,6,7,8,9,10 đến khi
step=[n/2]-1

Chương trình
Chương trình
void ShellSort(int a[], int N, int h[], int k)
{ int step, i,j,x,len;
for (step=0;step<[n/2];step++)
{ len=h[step];

for(i=len;i<N;i++)
{ x=a[i]; j=i-len;
while((x<a[j])&&(j>=0))
{ a[j+len]=a[j]; j=j-len; }
a[j+len]=x;
}
}
}




Heap sort
Heap sort
Định nghĩa lô (Heap):
Dãy a[0], a[1], a[2],…., a[n-1] được gọi
là một lô nếu thỏa mãn điều kiện sau :
a[k]>=a[i] với k=(i-1)/2 và 0<=k<i<n
Và khi đó ta nhận thấy rằng :
+ a[0] = max { a[0], a[1],…, a[n-1] }
+ a[j], a[j+1],…, a[n-1] là một lô
với j=(n-1)/2+1

Ý tưởng
Ý tưởng


+ Sắp xếp sao cho mảng a[0], a[1], ….,
a[n-1] là một lô. Khi đó a[0] là phần tử lớn
nhất của mảng.

+ Hoán vị a[0] và a[n-1].
+ Lặp lại hai bước này với mảng mới là
( a[0], a[1],…., a[n-2] ), ….
+ Cứ tiếp tục cho đến hết mảng.

×