ĐẠI HỌC ĐÀ NẴNGTRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC ĐỒ ÁN CHUYÊN NGHÀNH ĐỀ TÀI TÌM HIỂU THUẬT TOÁN SẮP XẾP Giáo viên hướng dẫn : GS.NGUYỄN TRẦN QUỐC VINH Sinh viên thực hiện : VÕ VĂN K
Trang 1ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC
ĐỒ ÁN CHUYÊN NGHÀNH
ĐỀ TÀI TÌM HIỂU THUẬT TOÁN SẮP XẾP
Giáo viên hướng dẫn : GS.NGUYỄN TRẦN QUỐC VINH Sinh viên thực hiện : VÕ VĂN KIỆT
Lớp sinh hoạt : 17CNTT3
Đà Nẵng, tháng 9 năm 2020
Trang 2Thuật toán sắp xếp Bubble Sort
1 Sơ đồ khối của Thuật toán sắp xếp Bubble Sort:
True
false
True
True False
False
Bắt Đầu
Nhập Mảng
i>=0
&
i<n Swap=fale
A[j-1]>A[j]
Swap=True
SwapA[j],A[j-1]
j>n
Swap=False
Kết thúc
Trang 32 Mã nguồn thuật toán sắp xếp Bubble:
void Nhapmang(int A[],int n){
for (int i=0;i<n;i++){
cout<<"Nhap Phan Tu Thu A["<<i<<"]="; cin>>A[i];
}
}
void XuatMang(int A[],int n ){
cout<<endl;
for (int i=0;i<n;i++)
cout<<A[i]<<"\t";
}
void Swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void bubblesort(int A[],int n)
{
for (int i=0;i<n;i++)
for (int j=n-1;j>i;j )
if (A[j]<A[j-1])
swap(A[j-1],A[j]);
}
int main(){
int A[max],n;
cout<<"Nhap so phan tu :";
cin>>n;
Nhapmang(A,n);
cout<<"/n Mang vua nhap la :";
XuatMang(A,n);
cout<<endl;
bubblesort(A,n);
cout<<"Mang vua sap xep la : ";
XuatMang(A,n);
Trang 4return 0;
}
3)Cho 3 dãy và chạy theo từng bước mã nguồn trên từng dãy:
- Mảng tăng dần : 1,4,6,9,10,12,15,18
-Mảng giảm dần : 18,15,12,10,9,6,4,1
-Mảng sắp xếp ngẩu nhiên : :4,1,6,12,18,15,9,10
Dãy 1 : 1,4,6,9,10,12,15,18
B1:Nhập mang A[8]= 1,4,6,9,10,12,15,18
B2:Vòng lặp for (int i=0;i<n;i++)
for (int j=n-1;j>i;j )
Đk : if (A[j]<A[j-1])
swap(A[j-1],A[j]);
-lần 1: for (i=0;i<8;i++)
for (j=7;j>0;j )
A[7]>A[6]
A[i]= 1,4,6,9,10,12,15,18
A[6]>A[5]
A[i]= 1,4,6,9,10,12,15,18
A[5]>A[4]
A[i]= 1,4,6,9,10,12,15,18
A[4]>A[3]
A[i]= 1,4,6,9,10,12,15,18
A[3]>A[2]
A[i]= 1,4,6,9,10,12,15,18
A[2]>A[1]
A[i]= 1,4,6,9,10,12,15,18
A[1]>A[0]
A[i]= 1,4,6,9,10,12,15,18
B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18
Dãy 2: 18,15,12,10,9,6,4,1
B1:Nhập mang A[8]= 18,15,12,10,9,6,4,1
B2:Vòng lặp for (int i=0;i<n;i++)
for (int j=n-1;j>i;j )
Trang 5Đk : if (A[j]<A[j-1]) swap(A[j-1],A[j]); -Lần 1: for (i=0;i<8;i++) for (j=7;j>0;j ) A[7]<A[6]
Swap(A[7],A[6])
A[i]= 18,15,12,10,9,6,1,4 A[6]<A[5]
Swap(A[6],A[5])
A[i]= 18,15,12,10,9,1,6,4 A[5]<A[4]
Swap(A[5],A[4])
A[i]= 18,15,12,10,1,9,6,4 A[4]<A[3]
Swap (A[4],A[3])
A[i]= 18,15,12,1,10,9,6,4 A[3]<A[2]
Swap(A[3],A[2])
A[i]= 18,15,1,12,10,9,6,4 A[2]<A[1]
Swap(A[2],A[1])
A[i]= 18,1,15,12,10,9,6,4 A[1]<A[0]
Swap(A[1],A[0])
A[i]= 1,18,15,12,10,9,6,4 -Lần 2: for (i=1;i<8;i++) for (j=7;j>0;j ) A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,18,15,12,10,9,4,6 A[6]<A[5]
Swap(A[6],A[5])
A[i]= 1,18,15,12,10,4,9,6 A[5]<A[4]
Swap(A[5],A[4])
Trang 6A[i]= 1,18,15,12,4,10,9,6 A[4]<A[3]
Swap (A[4],A[3]) A[i]= 1,18,15,4,12,10,9,6 A[3]<A[2]
Swap(A[3],A[2]) A[i]= 1,18,4,15,12,10,9,6 A[2]<A[1]
Swap(A[2],A[1]) A[i]= 1,4,18,15,12,10,9,6 -Lần 3: for (i=2;i<8;i++) for (j=7;j>0;j ) A[7]<A[6]
Swap(A[7],A[6]) A[i]= 1,4,18,15,12,10,6,9 A[6]<A[5]
Swap(A[6],A[5]) A[i]= 1,4,18,15,12,6,10,9 A[5]<A[4]
Swap(A[5],A[4]) A[i]= 1,4,18,15,6,12,10,9 A[4]<A[3]
Swap (A[4],A[3]) A[i]= 1,4,18,6,15,12,10,9 A[3]<A[2]
Swap(A[3],A[2]) A[i]= 1,4,6,18,15,12,10,9 -Lần 4: for (i=3;i<8;i++) for (j=7;j>0;j ) A[7]<A[6]
Swap(A[7],A[6]) A[i]= 1,4,6,18,15,12,9,10 A[6]<A[5]
Swap(A[6],A[5]) A[i]= 1,4,6,18,15,9,12,10 A[5]<A[4]
Trang 7A[i]= 1,4,6,18,9,15,12,10
A[4]<A[3]
Swap (A[4],A[3])
A[i]= 1,4,6,9,18,15,12,10
-Lần 5: for (i=4;i<8;i++)
for (j=7;j>0;j )
A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,4,6,9,18,15,10,12
A[6]<A[5]
Swap(A[6],A[5])
A[i]= 1,4,6,9,18,10,15,12
A[5]<A[4]
Swap(A[5],A[4])
A[i]= 1,4,6,9,10,18,15,12
-Lần 6: for (i=5;i<8;i++)
for (j=7;j>0;j )
A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,4,6,9,10,18,12,15
A[6]<A[5]
Swap(A[6],A[5])
A[i]= 1,4,6,9,10,12,18,15
-Lần 7: for (i=6;i<8;i++)
for (j=7;j>0;j )
A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,4,6,9,10,12,15,18
B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18
Dãy 3 sắp xếp ngẫu nhiên: 4,1,6,12,18,15,9,10 B1:Nhập mang A[8]= 4,1,6,12,18,15,9,10
B2:Vòng lặp for (int i=0;i<n;i++)
for (int j=n-1;j>i;j )
Trang 8Đk : if (A[j]<A[j-1]) swap(A[j-1],A[j]); lần 1: for (i=0;i<8;i++) for (j=7;j>0;j ) A[7]>A[6]
A[i]= 4,1,6,12,18,15,9,10 A[6]<A[5]
Swap(A[6],A[5])
A[i]= 4,1,6,12,18,9,15,10 A[5]<A[4]
Swap(A[5],A[4])
A[i]= 4,1,6,12,9,18,15,10 A[4]<A[3]
Swap (A[4],A[3])
A[i]= 4,1,6,9,12,18,15,10 A[3]>A[2]
A[i]= 4,1,6,9,12,18,15,10 A[2]<A[1]
A[i]= 4,1,6,9,12,18,15,10 A[1]<A[0]
Swap(A[1],A[0])
A[i]= 1,4,6,9,12,18,15,10 Lần 2: for (i=1;i<8;i++) for (j=7;j>0;j ) A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,4,6,9,12,18,10,15 A[6]<A[5]
Swap(A[6],A[5])
A[i]= 1,4,6,9,12,10,18,15 A[5]<A[4]
Swap(A[5],A[4])
A[i]= 1,4,6,9,10,12,18,15 A[4]>A[3]
A[i]= 1,4,6,9,10,12,18,15 A[3]>A[2]
Trang 9A[i]= 1,4,6,9,10,12,18,15
A[2]>A[1]
A[i]= 1,4,6,9,10,12,18,15
Lần 3: for (i=2;i<8;i++)
for (j=7;j>0;j )
A[7]<A[6]
Swap(A[7],A[6])
A[i]= 1,4,6,9,10,12,15,18
A[6]>A[5]
A[i]= 1,4,6,9,10,12,15,18
A[5]>A[4]
A[i]= 1,4,6,9,10,12,15,18
A[4]>A[3]
A[i]= 1,4,6,9,10,12,15,18
A[3]>A[2]
A[i]= 1,4,6,9,10,12,15,18
B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18
Trang 10
Thuật toán sắp xếp Selection
1) Sơ đồ khối của thuật toán sắp xếp Selection Sort :
Begin
For i=0 to n-2
i(min)=i
For j=i+1
to n-1
If (a(j)<a(i(min)
i(min)=j
end Swap a(i) And a(i(min))
Trang 112) Mã nguồn thuật toán sắp xếp chọn Selection Sort:
void NhapMang(int A[],int n){
for(int i=0;i<n;i++){
cout<<"Nhap phan tu thu A["<<i<<"]:= "; cin>>A[i];
}
}
void XuatMang(int A[],int n){
cout<<endl;
for(int i=0;i<n;i++)
cout<<A[i]<<"\t";
}
void swap(int &a ,int &b ){
int temp=a;
a=b;
b=temp;
}
void SelecitionSort(int A[], int n){
int min;
for (int i=0;i<n-1;i++){
min=i;
for (int j=i+1;j<n;j++)
if(A[min]>A[j])
min=j;
if(min!=i)
swap(A[i],A[min]);
}
}
int main(){
int A[max],n;
Trang 12cout<<"Nhap so phan tu :";
cin>>n;
NhapMang(A,n);
cout<<" Mang A vua nhap la :";
XuatMang(A,n);
cout<<endl;
SelecitionSort(A,n);
cout<<"Mang vua sap xep la :";
XuatMang(A,n);
return 0;
}
3)Cho 3 dãy và chạy theo từng bước mã nguồn trên từng dãy:
- Mảng tăng dần : 1,4,6,9,10,12,15,18
-Mảng giảm dần : 18,15,12,10,9,6,4,1
-Mảng sắp xếp ngẩu nhiên : :4,1,6,12,18,15,9,10
1)Mảng sắp xếp ngẫu nhiên : 4,1,6,12,18,15,9,10
B1 Nhập mảng A[8]= 4,1,6,12,18,15,9,10
B2 Vòng lặp for (int i=0;i<n-1;i++){
Min =I;
for (int j=i+1;j<n;j++)
if (A[min]>A[j])
Min = j
Dk : If (Min !=I)
Swap (A[i] ,A[min])
Lần 1 : for for (int i=0;0<7;i++){
Min =i;
for (int j=1;j<n;j++)
A[0]>A[1]
Min=1
A[1] <A[2]
Min=1
A[1]<A[3]
Min=1
A[1]<A[4]
Trang 13Min=1 A[1]<A[5] Min=1 A[1]<A[6] Min=1 A[1]<A[7]
Dk Min != i
Swap (A[0],A[1]) A[i]= 1,4,6,12,18,15,9,10 Lần 2 : for for (int i=1;1<7;i++){ Min =i; for (int j=2;j<n;j++) A[1]<A[2] Min=1 A[1] <A[3] Min=1 A[1]<A[4] Min=1 A[1]<A[5] Min=1 A[1]<A[6] Min=1 A[1]<A[7]
Dk if Min != i
A[i]= 1,4,6,12,18,15,9,10 Lần 3: for (int i=2;2<7;i++){ Min =i; for (int j=3;j<n;j++) A[2]<A[3] Min=2 A[2] <A[4] Min=2 A[2]<A[5] Min=2 A[2]<A[6] Min=2
Trang 14A[2]<A[7] Min=2
Dk if Min != i
A[i]= 1,4,6,12,18,15,9,10 Lần 4: for (int i=3;3<7;i++){ Min =i; for (int j=4;j<n;j++) A[3]<A[4] Min=2 A[3] <A[5] Min=2 A[3]>A[6] Min=6 A[6]<A[7] Min=6
Dk if Min != i
Swap(A[3],A[6]
A[i]= 1,4,6,9,18,15,12,10 Lần 5: for (int i=4;4<7;i++){ Min =i; for (int j=5;j<n;j++) A[4]>A[5] Min=5 A[5] >A[6] Min=6 A[6]>A[7] Min=7
Dk if Min != i
Swap(A[4],A[7]
A[i]= 1,4,6,9,10,15,12,18 Lần 6: for (int i=5;5<7;i++){ Min =i; for (int j=6;j<n;j++) A[5]>A[6] Min=6 A[6] <A[7]
Trang 15Min=6
Dk if Min != i
Swap(A[5],A[6]
A[i]= 1,4,6,9,10,12,15,18
B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18 2)Mảng tăng dần : 1,4,6,9,10,12,15,18
B1 Nhập mảng A[8]= 1,4,6,9,10,12,15,18
B2 Vòng lặp for (int i=0;i<n-1;i++){
Min =I;
for (int j=i+1;j<n;j++)
if (A[min]>A[j])
Min = j
Dk : If (Min !=I)
Swap (A[i] ,A[min])
-Lần 1 for (i=0;0<7;i++)
Min=I;
for (int j=1;j<n;j++)
A[0] <A[1]
Min=0
A[0]<A[2]
Min=0
A[0]<A[3]
Min=0
A[0] <A[4]
Min=0
A[0]<A[5]
Min=0
A[0]<A[6]
Min=0
A[0]<A[7]
Min=0
Dk if Min != i
A[i]: 1,4,6,9,10,12,15,18
Trang 16B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18 3)Mảng giảm dần : 18,15,12,10,9,6,4,1
B1 Nhập mảng A[8]= 18,15,12,10,9,6,4,1 B2 Vòng lặp for (int i=0;i<n-1;i++){
Min =I;
for (int j=i+1;j<n;j++)
if (A[min]>A[j])
Min = j
Dk : If (Min !=I)
Swap (A[i] ,A[min])
Lần 1 : for for (int i=0;0<7;i++){
Min =i;
for (int j=1;j<n;j++)
A[0]>A[1]
Min=1
A[1] >A[2]
Min=2
A[2]>A[3]
Min=3
A[3]>A[4]
Min=4
A[4]>A[5]
Min=5
A[5]>A[6]
Min=6
A[6]>A[7]
Min=7
Dk Min != i
Swap (A[0],A[7])
A[i]= 1,15,12,10,9,6,4,18
Lần 2 : for (int i=1;1<7;i++){
Min =i;
for (int j=2;j<n;j++)
A[1]>A[2]
Min=2
Trang 17A[2] >A[3] Min=3 A[3]>A[4] Min=4 A[4]>A[5] Min=5 A[5]>A[6] Min=6 A[6]<A[7] Min=6
Dk Min != i Swap (A[1],A[6]) A[i]= 1,4,12,10,9,6,15,18 Lần 3: for (int i=2;2<7;i++){ Min =i; for (int j=3;j<n;j++) A[2]>A[3] Min=3 A[3] >A[4] Min=4 A[4]>A[5] Min=5 A[5]<A[6] Min=5 A[5]<A[7] Min=5
Dk if Min != i
Swap (A[2],A[5]) A[i]= 1,4,6,10,9,12,15,18 Lần 4: for (int i=3;3<7;i++){ Min =i; for (int j=4;j<n;j++) A[3]>A[4] Min=4 A[4] <A[5] Min=4
Trang 18A[4]>A[6]
Min=4
A[4]<A[7]
Min=4
Dk if Min != i
Swap(A[3],A[4])
A[i]= 1,4,6,9,10,12,15,18
B3: In ra mảng đã sắp xếp A[i]= 1,4,6,9,10,12,15,18
Thuật toán sắp xếp Radix Sort
adixRadix sort