1
Các kiểu dữ liệu cơ bản
Các kiểu dữ liệu cơ bản
Chương 2
Kiểu tập tin
4
Kiểu mảng và chuỗi
1
Kiểu cấu trúc
2
Kiểu con trỏ
3
Độ phức tạp thuật toán
5
Nội dung
N
N
ộ
ộ
i dung
i dung
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u chu
u chu
ỗ
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u chu
u chu
ỗ
ỗ
i (String)
i (String)
Khai báo chuỗi: có thể dùng các cách sau
char S[10]; //Khai báo một chuỗi ký tự S có chiều dài
// tối đa 10 (kể cả kí tự kết thúc)
char S[]="ABC";// Khai báo một chuỗi ký tự S có chiều
// dài bằng chiều dài của chuỗi "ABC"
// và giá trị khởi đầu của S là "ABC"
char *S ="ABC";//Giống cách khai báo trên.
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
So sánh 2 chuỗi: strcmp
ớ
ớ
ch
ch
í
í
nh
nh
2
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u m
u m
ả
ả
ng (Array)
ng (Array)
Mảng là một tập hợp các biến có cùng tên và
kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ
Mỗi phần tử được đánh chỉ số (Index), phần tử
đầu tiên có chỉ số là 0
Trong C, một mảng n chiều có thể coi là mảng 1
chiều trong đó mỗi phần tử là 1 mảng n-1 chiều.
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
á
á
Ki
ể
ể
u h
u h
ợ
ợ
p (Union)
p (Union)
Union là một kiểu dữ liệu đặc biệt trong C, nó
tương tự kiểu struct nhưng các phần tử lại dùng
chung một vùng nhớ
Cách thức truy xuất đến các thành phần trong
kiểu Union giống như kiểu cấu trúc
Dùng kiểu Union khi cần lưu trữ dữ liệu thay đổi
theo trạng thái
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u h
u h
ợ
ợ
p (Union):
p (Union):
Khai b
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
Ví dụ, ta có thể định nghĩa kiểu số sau:
typedef union tagNumber
{
int i;
long l;
}Number;
Number N;
Khi gán N.l=0xFF09 thì thành phần N.i sẽ nhận giá trị là 9
C
C
á
á
c c
c c
ấ
ể
u c
u c
ấ
ấ
u tr
u tr
ú
ú
c (Structure)
c (Structure)
Kiểu cấu trúc (hay kiểu mẫu tin) là một tập hợp
các biến khác tên và có thể khác nhau về kiểu
dữ liệu
Cách thức truy xuất đến các thành phần trong
kiểu cấu trúc: Têncấutrúc.Tênthànhphần
Dùng kiểu cấu trúc khi muốn lưu trữ thông tin
của các đối tượng phức tạp và đa dạng
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u c
u c
ấ
ấ
u tr
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
Ví dụ, ta có thể định nghĩa kiểu cấu
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u c
u c
ấ
ấ
u tr
u tr
ú
ú
c (Structure):
c (Structure):
Truy xu
Truy xu
ấ
ấ
t d
c
ấ
ấ
u tr
u tr
ú
ú
c
c
Cách thức truy xuất đến các thành phần trong kiểu
cấu trúc: Têncấutrúc.Tênthành phần
Để lấy địa chỉ của một thành phần trong cấu trúc, ta
dùng toán tử &: &Têncấutrúc.Tênthànhphần
Vd: Ngaythang N,M;
printf(“Nhập ngày tháng: ”);
scanf(“%d/%d/%d”,&N.ngay,&N.thang,&N.nam);
M=N;//gán biến cấu trúc N vào biến M
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
ú
ú
c (Structure):
c (Structure):
H
H
à
à
m v
m v
à
à
ki
ki
ể
ể
u c
u c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
á
á
- Con trỏ mẫu tin: khi đó tham số thực là địa chỉ của biến cấu trúc.
Hàm có thể trả về:
- Giá trị mẫu tin: Ngaythang tênhàm( )
- Con trỏ mẫu tin: Ngaythang *tênhàm( )
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
á
á
c c
ể
ể
u con tr
u con tr
ỏ
ỏ
(Pointer)
(Pointer)
Khai b
Khai b
á
á
o bi
o bi
ế
ế
n con tr
n con tr
ỏ
ỏ
Tr
Tr
ự
ự
c ti
c ti
ế
ế
Gi
Gi
á
á
n ti
n ti
ế
ế
p
p
: typedef <ki
: typedef <ki
ể
ể
ucơs
ucơs
ở
ở
T> *<tênki
T> *<tênki
ể
ể
ucontr
ucontr
ỏ
ỏ
>;
>;
á
á
o bi
o bi
ế
ế
n
n
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u con tr
u con tr
ỏ
ỏ
(Pointer)
(Pointer)
Khai b
Khai b
á
á
o bi
o bi
ế
ế
n con tr
ế
n X
n X
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u con tr
u con tr
ỏ
ỏ
(Pointer)
(Pointer)
C
C
á
á
c thao t
c thao t
á
á
c
c
Gán địa chỉ một biến cho con trỏ
tênbiếncontrỏ = &tênbiếncầnlấyđịachỉ;
tênbiếncontrỏ = NULL;
Ví dụ:
u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
Truy xuất nội dung 1 biến do biến con trỏ trỏ đến
Cú pháp:*tênbiếncontrỏ
Lưu ý: toán tử * và & có cùng độ ưu tiên
Ví dụ: int X, *P;
X=10; P=&X; //P trỏ đến X
printf(“Giá trị X là: %d”,X);
printf(“Giá trị do P trỏ đến: %d”,*P);
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u con tr
u con tr
ỏ
ỏ
(Pointer)
(Pointer)
C
C
á
á
c ph
c ph
é
é
p to
p to
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
v
à
à
m
m
ả
ả
ng 1 chi
ng 1 chi
ề
ề
u
u
Tên mảng là hằng địa chỉ của phần tử đầu tiên trong
mảng, có thể thực hiện phép cộng địa chỉ với tên mảng.
Khi đó (A+i) tương ứng với &A[i]
Ta cũng có thể sử dụng con trỏ trên mảng với các phép
toán sau
Lấy địa chỉ phần tử thứ i : &A[i]
Cộng địa chỉ
Vd: int i, *p, A[3]={10,20,30}; p=A;// hoặc p=&A[0];
for (i=0;i<3;i++) printf(“A[%d]=%d”,i,*(A+i));
for (i=0;i<3;i++) printf(“A[%d]=%d”,i,*(p+i));
C
C
á
á
c ki
c ki
ể
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
toán sau
Lấy địa chỉ phần tử A[i][j] : p+i*sốcột+j
Cộng địa chỉ
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
í
nh
nh
6
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u con tr
u con tr
ỏ
ỏ
(Pointer)
(Pointer)
Con tr
Con tr
ỏ
ỏ
v
v
à
à
m
m
ả
ả
ng 2 chi
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
v
v
à
à
ki
ki
ể
ể
u c
u c
ấ
ấ
u tr
u tr
ú
ú
c
c
Lấy địa chỉ của một phần tử trong cấu trúc ta
dùng toán tử &
Vd :struct Ngay{ int ngay,thang,nam;}X;
struct Ngay *p;
p=&X; //p trỏ đến cấu trúc X
Để truy xuất giá trị của pt trong cấu trúc ta có thể
Cách 1: *(p).ngay, *(p).thang, *(p).nam
Cách 2: pngay, pthang, pnam
C
C
á
á
c c
c c
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ch
ch
í
í
nh
nh
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
u tr
u tr
ú
ú
c
c
C
C
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
Ưu điểm của RAM: truy xuất nhanh
Nhược điểm của RAM: kích thước hạn chế,
không lưu trữ thông tin khi mất điện
Giải pháp: lưu trữ trên bộ nhớ ngoài (ổ đĩa)
Ưu: kích thước lớn, lưu trữ lâu dài
Nhược: truy xuất chậm do sử dụng thiết bị cơ khí
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
i
7
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
Có 2 loại tập tin
Tập tin văn bản (Text file)
Tập tin nhị phân (Binary file)
u tr
u tr
ú
ú
c
c
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
ậ
p tin
p tin
1. Khai báo biến tập tin: FILE *ContrỏFile;
File được kết thúc bởi ký tự có mã 26 (EOF)
2. Mở tập tin: ContrỏFile = fopen (char *têntậptin, char *kiểu);
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
ớ
ớ
c thao t
c thao t
á
á
c trên t
c trên t
ậ
ậ
p tin
p tin
V
V
í
í
d
d
ụ
ụ
:
:
FILE *fp;
FILE *fp;
fp = fopen(
fp = fopen(
“
“
C:
C:
);
);
exit(1);
exit(1);
}
}
C
C
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u c
u c
ó
ó
c
c
ấ
ấ
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
C
C
á
á
c bư
c bư
ớ
ớ
c thao t
c thao t
á
á
c trên t
c trên t
ậ
ớ
ớ
ngo
ngo
à
à
i
i
8
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
C
C
á
á
c bư
c bư
ớ
ớ
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
C
C
á
á
c bư
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
ể
u t
u t
ậ
ậ
p tin (File)
p tin (File)
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
i
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Ki
Ki
ể
Xóa tập tin:
int remove (const char * path);
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
i
9
3/11/2010
4. Đóng tập tin
int fclose (FILE *fp);
Nếu có lỗi hàm cho EOF ngược lại cho giá trị 0.
int fcloseall ( );
Nếu có lỗi cho EOF nếu không cho số file được đóng.
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
i
fp = fopen(a[1], "wt");
while (( c = getchar()) != EOF) //hàm getchar() trả về EOF
{ putc( c, fp); sobyte++; } //khi có lỗi hoặc ấn F6
printf("\n\t 1 file copy \t\t %d bytes ", sobyte);
fclose(fp);
}
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
à
à
fp = fopen(a[1], "wt");
while ( gets(st)) != NULL) //hàm gets(st) trả về NULL khi có lỗi
{ fputs( st, fp); fputs("\n", fp); //hoặc ấn F6
sobyte+=strlen(st);
}
printf("\n\t 1 file copy \t\t %d bytes ", sobyte);
fclose(fp);
}
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ớ
ngo
ngo
Polygol P;
void main(void)
{
FILE *fp;
char c; int n,i;
fp = fopen("c:\\dagiac.dat","rt");
fscanf(fp,"%d",&n);
printf("%d\n",n);
for (i=0; i<n; i++) fscanf(fp,"%d %d",&P[i].x,&P[i].y);
fclose(fp);
}
C
C
ấ
ấ
u tr
u tr
ú
ú
c lưu tr
c lưu tr
ữ
ữ
trên b
trên b
ộ
ộ
nh
nh
ớ
ậ
t to
t to
á
á
n
n
L
L
à
à
s
s
ố
ố
l
l
ệ
ệ
nh c
nh c
ầ
ầ
n thi
n thi
ế
ế
t m
nh s
ử
ử
d
d
ụ
ụ
ng thu
ng thu
ậ
ậ
t to
t to
á
á
n
n
Th
Th
ờ
ờ
i gian th
i gian th
ự
ự
c hi
c hi
ệ
í
ch thư
ch thư
ớ
ớ
c d
c d
ữ
ữ
li
li
ệ
ệ
u v
u v
à
à
o, ký hi
o, ký hi
ệ
ệ
u T(n),
u T(n),
T(n)
T(n)
0
0
c hi
ệ
ệ
n
n
trong trư
trong trư
ờ
ờ
ng h
ng h
ợ
ợ
p x
p x
ấ
ấ
u nh
u nh
ấ
ấ
t
t
Đ
Đ
á
á
nh gi
nh gi
á
l
l
ệ
ệ
tăng c
tăng c
ủ
ủ
a h
a h
à
à
m (Growth Rate)
m (Growth Rate)
Cho hai h
Cho hai h
à
à
m không âm T
m không âm T
1
1
(n) v
(n) v
à
à
T
T
(n) n
(n) n
ế
ế
u t
u t
ồ
ồ
n t
n t
ạ
ạ
i c
i c
á
á
c h
c h
ằ
ằ
ng
ng
s
s
ố
ố
c v
c v
à
à
V
V
í
í
d
d
ụ
ụ
: T
: T
ì
ì
m t
m t
ỷ
ỷ
l
l
ệ
ệ
gia tăng c
gia tăng c
ủ
ủ
a h
a h
à
à
m T
m T
2
2
+n
+n
2
2
=4n
=4n
2
2
v
v
ớ
ớ
i m
i m
ọ
ọ
i n
i n
≥
≥
1
1
ch
ch
ọ
ọ
2
2
(n) =n
(n) =n
2
2
Đ
Đ
á
á
nh gi
nh gi
á
á
đ
đ
ộ
ộ
ph
ph
ứ
ứ
c t
c t
ạ
ạ
p thu
p thu
ậ
ậ
t to
á
á
n (Complexity)
n (Complexity)
Cho hai h
Cho hai h
à
à
m T
m T
1
1
(n) v
(n) v
à
à
T
T
2
2
(n)
(n)
T
T
1
u t
ồ
ồ
n t
n t
ạ
ạ
i c
i c
á
á
c h
c h
ằ
ằ
ng s
ng s
ố
ố
c v
c v
à
à
n
n
0
0
: T
: T
1
ệ
u: T
u: T
1
1
(n) =
(n) =
O(
O(
T
T
2
2
(n)
(n)
)
)
đ
đ
ọ
ọ
c l
c l
à
à
“
“
ô c
ô c
ủ
à
m đã bi
m đã bi
ế
ế
t như
t như
: log
: log
2
2
n, n,
n, n,
nlog
nlog
2
2
n, n
n, n
2
2
, n
, n
3
3
, 2
, 2
n
n
, n!, n
á
á
n
n
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
Đ
Đ
ộ
ộ
ph
ph
ứ
ứ
c t
c t
ạ
ạ
p c
p c
ủ
ủ
a thu
a thu
ậ
ậ
t to
t to
á
á
n
n
O(1)
n
T(n)
11
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
C
C
á
á
ch t
ch t
í
í
nh đ
nh đ
ộ
ộ
ph
ph
ứ
ứ
c t
c t
ạ
ạ
n chương tr
n chương tr
ì
ì
nh P1v
nh P1v
à
à
P2
P2
l
l
ồ
ồ
ng nhau
ng nhau
; T1(n) = O(f(n)),
; T1(n) = O(f(n)),
T2(n) = O(g(n)) th
T2(n) = O(g(n)) th
ì
ì
th
th
ờ
ờ
i gian th
i gian th
ự
ự
T(n) = O(
T(n) = O(
f(n).g(n)
f(n).g(n)
)
)
Qui t
Qui t
ắ
ắ
c c
c c
ộ
ộ
ng
ng
:
:
Cho hai đo
Cho hai đo
ạ
ạ
n chương tr
n chương tr
ì
ì
ự
ự
c hi
c hi
ệ
ệ
n c
n c
ủ
ủ
a đo
a đo
ạ
ạ
n hai
n hai
chương tr
chương tr
ì
ì
nh đ
nh đ
ó
ó
l
l
à
à
T(n)=O(
T(n)=O(
á
á
n
n
3/11/2010
www.lhu.edu.vn
Chương 2 Các kiểu dữ liệu cơ bản
C
C
á
á
ch t
ch t
í
í
nh đ
nh đ
ộ
ộ
ph
ph
ứ
ứ
c t
c t
ạ
ạ
p c
p c
ủ
for (j =N
-
-
1; j >i ; j
1; j >i ; j)
)
{3}
{3}
if(a[j]< a[j
if(a[j]< a[j
-
-
1])
1])
// n
// n
ế
ế
u sai v
u sai v
ị
ị
tr
tr
í
í
th
-
1] = temp;
1] = temp;
}
}
}
}
đ
đ
ộ
ộ
ph
ph
ứ
ứ
c t
c t
ạ
ạ
p l
p l
à
à
O(n
O(n
2
2
)
n