You are on page 1of 16

I. Code: #include <iostream.h> #include <conio.

h> void hoandoi(int &a,int &b) { int t; t=a; a=b; b=t; } void Nhap(int a[],int &n) { cout<<"Nhap n= "; cin>>n; for(int i=0;i<n;i++) { cout<<"a["<<i<<"] : "; cin>>a[i]; }

} void Xuat(int a[],int n) { cout<<"\n Mang vua nhap la: \n"; for(int i=0;i<n;i++) cout<<"\t "<<a[i]; } void Interchange(int a[], int n) { for(int i=0;i<n-1;i++) for(int j= i+1;j<n;j++) { if (a[i]>a[j]) hoandoi(a[i],a[j]); } cout<<"\n\n Interchange sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Selection(int a[], int n)

{ int min,i,j; for(i=0;i<n-1;i++) { min =i; for(j= i+1;j<n;j++) if (a[j]<a[min]) min=j; hoandoi(a[min],a[i]); } cout<<"\n Selection sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Bubble(int a[], int n) { for(int i=0;i<n-1;i++) for(int j= n-1;j>i;j--)

if (a[j]<a[j]) hoandoi(a[i],a[j-1]); cout<<"\n Bubble sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Insert(int a[], int n) { int pos,x; for(int i=1;i<n;i++) { x=a[i]; pos=i-1; while(pos>=0 && a[pos]>x) { a[pos+1]=a[pos]; pos--; }

a[pos+1]=x; } cout<<"\n Insert sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Shell(int a[],int n,int b[],int k) { int step,i,pos,x,len; for(step=0;step<k;step++) { len=b[step]; for(i=len;i<n;i++ ) { x=a[i]; pos=i-len; while((pos>=0)&&(x<a[pos])) { a[pos+len]=a[pos]; pos=pos-len; }

a[pos+len]=x; } } cout<<"\n Shell sort :\n"; for(int m=0;m<n;m++) cout<<"\t"<<a[m]; } void Qhick(int a[],int n,int left,int right) { int i,j,x; x=a[(left+right)/2]; i=left;j=right; do { while(a[i]<x) i++; while(a[j]>x) j--; if(i<=j) {

hoandoi(a[i],a[j]); i++; j--; } } while(i<=j); if(left<j) Qhick(a,n,left,j); if(i<right) Qhick(a,n,i,right); cout<<"\n Qhick sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Shake(int a[],int n) { int i; int left,right,k; left=0;right=n-1;k=n-1; while(left<right) {

for(i=right;i>left;i--) if(a[i]<a[i-1]) { hoandoi(a[i],a[i-1]); k=i; } left=k; for(i=left;i<right;i++) if(a[i]>a[i+1]) { hoandoi(a[i],a[i+1]); k=i; } right=k; } cout<<"\n Shake sort :\n"; for(int m=0;m<n;m++) cout<<"\t"<<a[m]; } void BInsertion(int a[],int n) {

int left,right,mid,i; int x; for(i=1;i<n;i++) { x=a[i]; left=0; right=i-1; while(left<=right) { mid=(left+right)/2; if(x<a[mid]) right=mid-1; else left=mid+1; } for(int j=i-1;j>=left;j--); a[j+1]=a[j]; a[left]=x; }

cout<<"\n Binary Insertion sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void Shift(int a[],int l,int r) { int i,j,x; i=l; j=2*i+1; x=a[i]; while(j<=r) { if(j<r) if(a[j]<a[j+1]) j++; if(a[j]<=x) return; else {

a[i]=a[j]; a[j]=x; i=j; j=2*i+1; x=a[i]; } } } void CreateHeap(int a[],int n) { int l=(n/2)-1; while (l>=0) { Shift(a,l,n-1); l--; } } void Heap(int a[],int n) { int r;

CreateHeap(a,n); r=n-1; while(r>0) { hoandoi(a[0],a[r]); r--; if(r>0) Shift(a,0,r); } cout<<"\n Heap sort :\n"; for(int k=0;k<n;k++) cout<<"\t"<<a[k]; } void main() { clrscr(); int a[50]; int n; Nhap(a,n); Xuat(a,n); Interchange(a,n); Bubble(a,n); Insert(a,n); Shell(a,n,a,n); Qhick(a,n,n,n); Selection(a,n); Shake(a,n); BInsertion(a,n); Heap(a,n); getch(); } II. phc tp ca cc thut ton: SELECTION SORT chn c phn t nh nht, ta cn duyt qua n phn t (tn n-1 php so snh) v sau hon v n vi phn t u tin ca dy hin hnh. tm phn t nh nht tip theo, ta cn duyt qua n-1 phn t (tn n-2 php so snh). C nh vy, ta thy ngay thut ton s tn (n-1) + (n-2) + + 1 = n(n-1)/2 = O(n2) php so snh. Mi ln duyt, ta lun phi hon v 1 ln (1 hon v tng ng vi 3 php gn), ngha l thut ton s tn 3(n-1) + 3(n-2) + + 3 = 3n(n-1)/2 = O(n2) php gn. Tng kt li, ta lun c phc tp ca thut ton Selection Sort thuc O(n2) trong mi trng hp.

INTERCHANGE SORT Thy ngay s php so snh l lun khng i, tc khng ph thuc vo tnh trng ban u ca dy. Ta c th c lng s php so snh bng (n-1) + (n-2) + + 1 = n(n-1)/2 (phn t th i c so snh vi n-i phn t cn li.) S php hon v (tng ng 3 php gn) li ph thuc vo tnh trng ban u ca dy. C th nh sau: o Trng hp tt nht: Dy ban u c th t. Ta thy ngay ta khng tn mt php hon v no. o Trng hp xu nht: Dy ban u c th t ngc. Ta thy ngay mi ln so snh phn t th i vi n-i phn t cn li, ta u phi thc hin hon v. iu ny c ngha l s php hon v bng n(n-1)/2. Tng kt li, ta c phc tp ca Interchange Sort thuc O(n2) trong mi trng hp. BUBBLE SORT Thy ngay s php so snh l lun khng i, tc khng ph thuc vo tnh trng ban u ca dy. Vi i bt k, ta lun phi so snh V[j] vi V[j-1], m j chy t n n i+1, tc ta tn n-i php so snh. Thm na, i chy t 1 n n-1. Vy ta tnh c s php so snh tng cng: (n-i) vi i chy t 1 n n-1 = (n-1) + (n-2) + + 1 = n(n-1)/2. S php hon v (tng ng 3 php gn) li ph thuc vo tnh trng ban u ca dy. C th nh sau: o Trng hp tt nht: Dy ban u c th t. Ta thy ngay ta khng tn mt php hon v no. o Trng hp xu nht: Dy ban u c th t ngc. Xt i bt k, ta thy rng mi ln so snh a[j] vi a[j-1], ta u phi thc hin hon v. iu ny c ngha l s php hon v bng n(n-1)/2. Tng kt li, ta c phc tp ca Bubble Sort thuc O(n2) trong mi trng hp. SHAKER SORT Ta thy s chuyn di ca phn t khng c g l ci tin (t v tr ban u ca n, i n v tr ng u mt chi ph nh Bubble Sort).
Ch c s php so snh l c ci tin, nhng cha tm c cng thc tnh s php so

snh, mt khc ta thy chi ph chuyn di lun cao hn (Chi ph hon v thng mt 3 php gn) so snh nn ci tin c th xem nh khng ng k. Thut ton vn c xp O(n2). INSERTION SORT Ta thy cc php so snh xy ra trong vng lp nhm tm v tr thch hp pos chn x. Mi ln so snh m thy v tr ang xt khng thch hp, ta di phn t a[pos] sang phi. Ta cng thy s php gn v s php so snh ca thut ton ph thuc vo tnh trng ca dy ban u. Do ta ch c th c lng nh sau:

o Trng hp tt nht: dy ban u c th t. Ta tm c ngay v tr thch hp chn ngay ln so snh u tin m khng cn phi v vng lp. Nh vy, vi i chy t 2 n n th s php so snh tng cng s l n-1. Cn vi s php gn, do thut ton khng chy vo vng lp nn xt i bt k, ta lun ch phi tn 2 php gn(x = a[i] v a[pos] = x). T y, ta tnh c s php gn tng cng bng 2(n - 1). o Trng hp xu nht: dy ban u c th t ngc. Ta thy ngay v tr thch hp pos lun l v tr u tin ca dy c th t, v do , tm ra v tr ny ta phi duyt ht dy c th t. Xt i bt k, ta c s php so snh l i-1, s php gn l (i - 1) + 2 = i + 1. Vi i chy t 2 n n, ta tnh c s php so snh tng cng bng 1 + 2 + + (n - 1) = n(n - 1)/2 v s php gn bng 3 + 4 + .. + (n + 1) = (n + 4)(n - 1)/2 Tng kt li, ta c phc tp ca Insertion Sort nh sau: o Trng hp tt nht: O(n)
o

Trng hp xu nht O(n2)

BINARY INSERTION SORT Ta nhn thy rng ci tin ca thut ton ch gip vic tm kim nhanh hn, gim i chi ph so snh trong lc tm kim, cn chi ph cho vic chn vn khng thay i (vn phi dch ng k phn t nh Insertion Sort chn) nn chi ph php gn khng c ci tin. Tm kim tt nht khi va tm phn t ln u l ra ngay, phn t s nm v tr middle ca dy c th t, nhng chi ph chn lc ny s l n/2, vi chi ph ny cn cao so vi trng hp tt nht.
Thut ton ch tt nht khi chi ph chn l 1, ng vi phn t tm phi nm cui dy c

th t, chi ph tm lc ny l log2n, m ta phi lm n ln cho n phn t nn l O(nlogn)


Thut ton xu nht khi phn t tm c nm u dy, chi ph chn lc ny l n (tm

kim l log2n, nhng chi ph chn mnh hn), m c n phn t nn l O(n2). Ta thy dng nh phc tp thut ton ph thuc mnh vo chi ph chn hn l tm kim, cho nn cch tt hn ta s ci t bng danh sch lin kt vic chn c tt hn. phc tp thut ton nh sau: o Trng hp tt nht: O(nlogn)
o

Trng hp xu nht O(n2)

HEAP SORT Ta thy c chi ph cho xy dng heap khi thm vo heap mt phn t mi l log 2n (chnh l chiu cao heap cho mi ln lm chm phn t xung v tr thch hp), mt khc t bc 2 n bc 3 ng vi mi phn t ta s xy dng li heap mt ln, m ta c n phn t. Vy ta c th c tnh chi ph cho sp xp HeapSort l O(nlogn) cho mi trng hp. (T thc nghim ci t cho kt qu l ~ 4log2n)

MERGE SORT Ta thy ngay s ln lp ca bc 2(phn phi) v bc 3(trn) bng log 2n. Ta cng thy rng chi ph thc hin bc 2 v bc 3 t l thun vi n. Nh vy, ta c th c tnh chi ph thc hin ca gii thut Merge Sort thuc O(nlog2n). Ta nhn thy rng gii thut lm vic mt cch cng nhc, khng tn dng c tnh th t mt phn ca dy ban u. Do , trong mi trng hp phc tp l nh nhau. y l mt nhc im ca phng php trn trc tip. BINARY TREE phc tp ca thut ton sort ph thuc vo 2 hm chnh l hm chn phn t v duyt ht cc phn t trong cy.
i vi hm chn phn t : ta c th thy rng thi gian chy t l thun vi chiu cao ca

cy -> trng hp xu nht i vi mng sp, tiu tn (n), v O(log n) trong trng hp trung bnh.
i vi hm duyt phn t: lun lun t c phc tp tnh ton l O(n), v n phi

duyt qua tt c cc nt. QUICK SORT Ta nhn thy hiu qu ca thut ton ph thuc vo vic chn gi tr mc (hay phn t cht).
Trng hp tt nht: mi ln phn hoch ta u chn c phn t median (phn t ln

hn hay bng na s phn t v nh hn hay bng na s phn t cn li) lm mc. Khi dy c phn hoch thnh hai phn bng nhau, v ta cn log 2(n) ln phn hoch th sp xp xong. Ta cng d nhn thy trong mi ln phn hoch ta cn duyt qua n phn t. Vy phc tp trong trng hp tt nht thuc O(nlog2(n)).
Trng hp xu nht: mi ln phn hoch ta chn phi phn t c gi tr cc i hoc cc

tiu lm mc. Khi dy b phn hoch thnh hai phn khng u: mt phn ch c mt phn t, phn cn li c n-1 phn t. Do , ta cn ti n ln phn hoch mi sp xp xong. Vy phc tp trong trng hp xu nht thuc O(n2). Tng kt li, ta c phc tp ca Quick Sort nh sau:
Trng hp tt nht: O(nlog2(n)) Trng hp xu nht: O(n2) Trng hp trung bnh: O(nlog2(n))

SHELL SORT Yu t quyt nh chnh ca thut ton chnh l cch chn khong cch h trong tng bc sp xp v s bc sp xp k. Nhng phi tha 2 iu kin sau:
-

hi > hi + 1 hk = 1.

Cc phn t h khng c l bi s ca nhau nhm trnh hin tng mi bc sp th t phi t hp 2 nhm m bc trc chng khng h c nh hng ln nhau. iu mong mun l nh hng gia cc nhm khc nhau cng nhiu cng tt.
Vic nh gi gii thut Shell sort hin nay rt phc tp, thm ch 1 s cha c chng

minh. Nhng c 1 iu chc chn l hiu qu ca thut ton ph thuc vo dy cc di c chn. Trong trng hp chn dy di theo cng thc hi = (hi 1 - 1)/2 v hk = 1, k = log2 - 1 th gii thut c phc tp tng ng n1,2 << n2 . C th ni y cn l 1 bi ton m v trn l thuyt vn tn ti cc dy c th em li tc ti u hn cho bi ton.

You might also like