You are on page 1of 15

Bài thảo luận

Cơ Sở Lập Trình

Đề tài: Xây dựng chương trình thể hiện các thuật


toán sắp xếp: sắp xếp chọn, sắp xếp chèn, sắp xếp
nổi bọt, .... Với một dãy số nhập vào sau khi thực
hiện chương trình sẽ cho ta dãy đã được sắp. Yêu
cầu chọn 2 thuật toán để thể hiện và so sánh.
Nhóm: 4
Cơ Sở Lập Trình NHÓM 4 1
Mục lục:

I. Khái niệm:
1. Sắp xếp nổi bọt
2. Sắp xếp chọn
II. So sánh và đánh giá thuật toán

Cơ Sở Lập Trình NHÓM 4 2


Khái niệm:
 Sắp xếp là quá trình bố trí lại các phần tử của
một tập các đối tượng nào đó theo một thứ tự nhất
định,
 Minh họa: Cho 10 chiếc cọc có chiều cao khác
nhau, cần sắp xếp các cọc theo thứ tự từ thấp đến
cao.

a) Dữ liệu gốc b) Sau khi sắp xếp

Cơ Sở Lập Trình NHÓM 4 3


1: Sắp xếp nổi bọt
Miêu tả thuật toán:
Lượt 1
 i chạy từ đầu dãy đến vị trí [cuối dãy -1]
 Khi a[i]>a[i+1] tức bọt nước bên trên nặng hơn bọt nước bên
dưới, bọt nước trên chìm xuống và bọt nước bên dưới nổi lên
(tráo đổi vị trí)
 Sau lượt 1 bọt nước nặng nhất sẽ chìm về cuối dãy.

Lượt 2
 i chạy từ đầu đến vị trí [cuối dãy -1] bỏ qua phần tử cuối cùng

 Sau lượt thứ 2 bọt nước nặng thứ 2 sẽ chìm về kế cận đáy.

 Quá trình duyệt, tráo đổi được lặp đi lặp lại cho đến khi duyệt
chỉ còn 2 phần tử và dãy sẽ được sắp xếp

Cơ Sở Lập Trình NHÓM 4 4


CHO DÃY SỐ SAU: 3 2 9 7 6
Giả sử:
Mỗi phần tử trong dãy được xem như là một bọt nước,
Trọng lượng của bọt nước thứ i là giá trị của A[i].

Lượt 2
1
•• ii
chạy từ
chạy từ đầu
đầu dãyđến đến vị
vị trí
3 trí [cuối
[cuối dãy -1]dãy bỏ -1] qua phần
• cuối
tử Khi cùng
a[i]>a[i+1] tức bọt
2 •nước
Sau bên
lượt thứtrên 2 nặng hơn
bọt nước
bọt nước
nặng thứ 2bên dưới, về bọt
sẽ chìm kế
9 nước
cận trên chìm xuống và
đáy.
bọtQuánước
trìnhbên dướitráo
duyệt, nổi đổi
lên
(tráolặp
được đổiđivị lặp
trí) lại cho đến
7
• Sau
khi lượt
duyệt chỉ1 bọt
còn nước
2 phầnnặngtử
6 vànhất
dãysẽ
sẽchìm
đượcvề sắpcuối
xếpdãy.
Cơ Sở Lập Trình NHÓM 4 5
 Ghi chú: Nếu trong một lần duyệt, không phải đổi chỗ bất
cứ cặp phần tử nào thì danh sách đã được sắp xếp xong.
 Chương trình dùng hàm được mô tả như sau:

#include <stdio.h>
#include <conio.h>
void SX_Noi_Bot(int sopt,int a[10])
{
int i, j, swap;
for(i=0; i<sopt; i++)
for(j=0; j<sopt; j++)
{
if(a[i]<a[j])

Cơ Sở Lập Trình NHÓM 4 6


{
swap=a[i];
a[i]=a[j];
a[j]=swap;
}
}
}
main ()
{
int a[10],i;
int x=10;
printf("\n Nhap mang: ");
printf("\n------------------------------------------------------------------\n");
for (i=0; i<10;i++)
{
printf("Nhap phan tu thu %d la: ",i+1);
scanf("%d",&a[i]);
}
SX_Noi_Bot(x,a);

Cơ Sở Lập Trình NHÓM 4 7


printf("\n------------------------------------------------------------------\n");
printf("Day sau khi sap xep");
printf("\n------------------------------------------------------------------\n");
for (i=0; i<10;i++)
{
printf("Nhap phan tu thu %d la: ",i+1);
printf("%5d\n",a[i]);
}
getch();
}

Cơ Sở Lập Trình NHÓM 4 8


* Chương trình không dùng hàm được mô tả như sau:
#include<stdio.h>
#include<conio.h>
main()
{
//khai bao bien
int a[10],i,h,j,k;
//nhap so lieu
for(i=0;i<10;i++)
{
printf("Nhap phan tu thu %d la:",i+1);
scanf("%d",&a[i]);
}
// sap xep
for(h=0;h<10;h++)
{
for(j=0;j<10;j++)
if(a[h]<a[j])
{

Cơ Sở Lập Trình NHÓM 4 9


k=a[h];
a[h]=a[j];
a[j]=k;
}
}
//in ket qua
printf("\n------------------------------------------------------------------\n");
printf("Sau khi sap xep ta duoc ket qua:");
printf("\n------------------------------------------------------------------\n");
for(i=0;i<10;i++)
printf("\n Phan thu thu %d la: %d ",i+1,a[i]);
getch ();
return 0;
}

Cơ Sở Lập Trình NHÓM 4 10


2. Sx chọn:

 Tư tưởng:
 Các bước tiến hành như sau:
 Bước 1: i=1
 Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện
hành từ a[i] đến a[n]
 Bước 3: Hoán vị a[min] và a[i]
 Bước 4: Nếu i<=n-1 thì i=i+1; Lặp lại bước 2
 Ngược lại: Dừng. n-1 phần tử đã nằm đúng vị trí.

Cơ Sở Lập Trình NHÓM 4 11


Giải thuật:
//* dùng hàm*//
void SX_Chon(int n,int a[10])
{
int i, j, swap, min;
for( i=0; i < n-1 ; i ++)
{
min = i;
for( j= i+1; j < n; j ++)
{
if( a[j] < a[min])
min = j;
}
swap = a[min];
a[min] = a[i];
a[i] = swap;
}
}

Cơ Sở Lập Trình NHÓM 4 12


II. So sánh và đánh giá thuật toán:

Tiêu chí Giải thuật nổi bọt Giải thuật chọn


trực
Cấu trúc dữ liệu Ngẫu nhiên Ngẫu nhiên

Phức tạp thời gian Trung bình O(n2) Trung bình O(n2)

Phức tạp dữ liệu Không tốn thêm Không tốn thêm


vùng nhớ vùng nhớ
Tối ưu Không Thỉnh thoảng

Cơ Sở Lập Trình NHÓM 4 13


Sắp xếp nổi bọt Sắp xếp chọn
Trườn Số lần so Số lần hoán Số lần so Số lần hoán
g hợp sánh vị sánh vị

Tốt                      n(n-1)/2 0


nhất  0

Xấu n(n-1)/2 3n(n-1)/2


nhất

Cơ Sở Lập Trình NHÓM 4 14


Cơ Sở Lập Trình NHÓM 4 15

You might also like