You are on page 1of 16

1210134 - Nhập môn lập trình

TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TP. HỒ CHÍ MINH
HO CHI MINH CITY UNIVERSITY OF FOREIGN LANGUAGES - INFORMATION TECHNOLOGY

Bài 6
Mảng một chiều
Biên soạn: ThS. Huỳnh Thành Lộc (locht@huflit.edu.vn)

Cập nhật: tháng 09/2023


www.huflit.edu.vn

NỘI DUNG

§ Giới thiệu kiểu dữ liệu Mảng


§ Các thao tác trên Mảng một chiều
§ Hàm có tham số có kiểu dữ liệu tham chiếu
§ Bài tập vận dụng

Bài 6: Mảng một chiều


2

GIỚI THIỆU KIỂU DỮ LIỆU MẢNG

§ Viết chương trình nhập vào 3 số nguyên. Tìm giá trị


lớn nhất trong 3 số nguyên vừa nhập.

static void Main(string[] args)


{
int num1 = int.Parse(Console.ReadLine());
int num2 = int.Parse(Console.ReadLine());
int num3 = int.Parse(Console.ReadLine());
int max = num1;

if (max < num2) Viết chương trình nhập


max = num2; vào n số nguyên. Tìm
giá trị lớn nhất trong n
if (max < num3) số nguyên vừa nhập?
max = num3;

Console.WriteLine(max);
}

Bài 6: Mảng một chiều


3

Biên soạn: ThS. Huỳnh Thành Lộc


1
1210134 - Nhập môn lập trình

GIỚI THIỆU KIỂU DỮ LIỆU MẢNG

§ Kiểu dữ liệu mảng (Array):


• Dùng để lưu một tập hợp các phần tử cùng kiểu dữ liệu;
• Phân loại:
ü Mảng một chiều (single-dimensional):

ü Mảng nhiều chiều (multidimensional):

ü Mảng răng cưa (jagged):

Bài 6: Mảng một chiều


4

GIỚI THIỆU KIỂU DỮ LIỆU MẢNG

§ Kiểu dữ liệu mảng (Array):


• Là kiểu dữ liệu tham chiếu;
• Các phần tử được đánh chỉ số (index) bắt đầu từ 0;

Ví dụ: Mảng một chiều a gồm 7 phần tử kiểu số nguyên

index
0 1 2 3 4 5 6
5 8 2 7 8 9 1 value
a

Bài 6: Mảng một chiều


5

KHAI BÁO MẢNG MỘT CHIỀU

§ Cú pháp: tương tự khai báo biến, dùng cặp dấu ngoặc


vuông [ ] sau kiểu dữ liệu.

type[] arrayName;
§ Khi chưa được khởi tạo các biến mảng (kiểu tham
chiếu) có giá trị null

null
static void Main(string[] args)
{
int[] nums; nums
check null
double[] scores;

bool[] check; null

} scores

Bài 6: Mảng một chiều


6

Biên soạn: ThS. Huỳnh Thành Lộc


2
1210134 - Nhập môn lập trình

KHỞI TẠO MẢNG MỘT CHIỀU

§ Cú pháp: arrayName = new type[size];

static void Main(string[] args)


{
int[] nums; 0 0 0 0 0 0
nums
double[] scores;

bool[] check;
0.0 0.0 0.0 0.0
nums = new int[6];
scores
scores = new double[4];

check = new bool[5];


false false false false false
}
check

Bài 6: Mảng một chiều


7

KHỞI TẠO MẢNG MỘT CHIỀU

§ Khởi tạo giá trị ban đầu cho các phần tử của mảng:

static void Main(string[] args)


{
int[] arr1; 5 8 2 7
arr1 = new int[4]{5, 8, 2, 7};
arr1

int[] arr2;
arr2 = new int[]{5, 8, 2, 7}; 5 8 2 7
arr2

int[] arr3;
arr3 = {5, 8, 2, 7};
5 8 2 7
arr3
}

Bài 6: Mảng một chiều


8

KHỞI TẠO MẢNG MỘT CHIỀU

§ Nhận xét:
• Không thể thay đổi kích thước mảng sau khi khởi tạo;
• Muốn thay đổi kích thước mảng phải khởi tạo lại mảng (tạo ra
một vùng giá trị mới và thay đổi tham chiếu tới vùng này)

static void Main(string[] args)


{ 5 8 2 7
int[] arr1;
arr1
arr1 = new int[4]{5, 8, 2, 7};

arr1 = new int[6];


}

Bài 6: Mảng một chiều


9

Biên soạn: ThS. Huỳnh Thành Lộc


3
1210134 - Nhập môn lập trình

KHỞI TẠO MẢNG MỘT CHIỀU

§ Nhận xét:
• Không thể thay đổi kích thước mảng sau khi khởi tạo;
• Muốn thay đổi kích thước mảng phải khởi tạo lại mảng (tạo ra
một vùng giá trị mới và thay đổi tham chiếu tới vùng này);
• Các phần tử cũ trong mảng không còn nữa!!!

static void Main(string[] args)


{ 5 8 2 7
int[] arr1;
arr1
arr1 = new int[4]{5, 8, 2, 7};

arr1 = new int[6];


} 0 0 0 0 0 0

Bài 6: Mảng một chiều


10

10

LẤY KÍCH THƯỚC CỦA MẢNG MỘT CHIỀU

§ Cú pháp: arrayName.Length;

static void Main(string[] args)


{
int[] arr1;
arr1 = new int[4];

Console.WriteLine(arr1.Length); //output 4
}

Bài 6: Mảng một chiều


11

11

TRUY CẬP PHẦN TỬ CỦA MẢNG MỘT CHIỀU

§ Cú pháp: arrayName[index];

§ Lưu ý quan trọng: Chỉ số bắt đầu từ 0 (phần tử đầu


tiên), kết thúc tại Length – 1 (phần tử cuối cùng)

static void Main(string[] args)


{ 0 1 2 3 index
int[] arr1;
arr1 = new int[4]; 0 0 8 0 value
arr1[2] = 8;

}
Console.WriteLine(arr1[2]); arr1

Bài 6: Mảng một chiều


12

12

Biên soạn: ThS. Huỳnh Thành Lộc


4
1210134 - Nhập môn lập trình

NHẬP/XUẤT MẢNG MỘT CHIỀU

§ Nhập mảng: sử dụng vòng lặp để nhập lần lượt từng


phần tử của mảng (array[0] à array[Length-1])

static void Main(string[] args)


{
Console.Write("n = ");
int n = int.Parse(Console.ReadLine());
int[] arr = new int[n];

for (int i = 0; i < arr.Length; i++)


{
Console.Write($"arr[{i}] = ");
arr[i] = int.Parse(Console.ReadLine());
}
}

Bài 6: Mảng một chiều


13

13

NHẬP/XUẤT MẢNG MỘT CHIỀU

§ Xuất mảng: sử dụng vòng lặp để xuất lần lượt từng


phần tử của mảng (array[0] à array[Length-1])
static void Main(string[] args)
{
Console.Write("n = ");
int n = int.Parse(Console.ReadLine());
int[] arr = new int[n];
for (int i = 0; i < arr.Length; i++)
{
Console.Write($"arr[{i}] = ");
arr[i] = int.Parse(Console.ReadLine());
}

for (int i = 0; i < arr.Length; i++)


{
Console.Write(arr[i] + " ");
}
Console.WriteLine());
}

Bài 6: Mảng một chiều


14

14

VẬN DỤNG

§ BT1: Viết chương trình thực hiện yêu cầu sau:


• Nhập vào một số nguyên dương n;
• Khởi tạo mảng số thực a kích thước n phần tử;
• Nhập giá trị cho các phần tử của mảng a;
• Xuất mảng a ra màn hình.

§ BT2: Viết chương trình thực hiện yêu cầu sau:


• Nhập vào một số nguyên dương n;
• Khởi tạo mảng số nguyên a kích thước n phần tử;
• Phát sinh giá trị ngẫu nhiên cho các phần tử của a trong đoạn
từ [1 - 100];
• Xuất mảng a ra màn hình.
• Yêu cầu nhập vào một số nguyên i, nếu i là chỉ số hợp lệ của
một phần tử trong mảng a thì in giá trị của phần tử đó ra màn
hình, ngược lại thông báo lỗi “Index out of range”.

Bài 6: Mảng một chiều


15

15

Biên soạn: ThS. Huỳnh Thành Lộc


5
1210134 - Nhập môn lập trình

HÀM CÓ THAM SỐ KIỂU MẢNG

§ Tham số của hàm có 2 dạng:


• Truyền tham trị (passing by value): truyền giá trị của đối số
cho tham số của hàm (tham số là một bản sao của đối số)
• Truyền tham chiếu (passing by reference): truyền địa chỉ của
đối số cho tham số của hàm (tham số và đối số là một)
§ Phần tiếp theo trình bày 2 dạng truyền tham số đối với
kiểu dữ liệu tham chiếu (kiểu Mảng một chiều).

Bài 5: Hàm
16

16

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


Before calling method: a[0] = 5
{
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}

Main 5 8 2 7

Bài 6: Mảng một chiều


17

17

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


{
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

a
Main 5 8 2 7

Bài 6: Mảng một chiều


18

18

Biên soạn: ThS. Huỳnh Thành Lộc


6
1210134 - Nhập môn lập trình

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args) Before calling method: a[0] = 5


{ Inside method: a[0] = 9
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

a
Main 9 8 2 7

Bài 6: Mảng một chiều


19

19

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}
Before calling method: a[0] = 5
static void Main(string[] args) Inside method: a[0] =9
{
int[] a = new int[4] {5, 8, 2, 7};
After calling method:a[0] = 9
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}

Main 9 8 2 7

Bài 6: Mảng một chiều


20

20

TRUYỀN THAM TRỊ KIỂU MẢNG

§ Nhận xét:
• Đối số phải là một mảng đã được khởi tạo;
• Tham số nhận giá trị là tham chiếu đến vùng giá trị của đối số
à tham số và đối số cùng tham chiếu đến 1 vùng giá trị.

Bài 6: Mảng một chiều


21

21

Biên soạn: ThS. Huỳnh Thành Lộc


7
1210134 - Nhập môn lập trình

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


{
int[] a = new int[4] {5, 8, 2,Before
7}; calling method: a[0] = 5
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

a
Main 5 8 2 7

Bài 6: Mảng một chiều


22

22

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


{
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

a
Main 9 8 2 7

Bài 6: Mảng một chiều


23

23

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


{
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

-3 -7
a
Main 9 8 2 7

Bài 6: Mảng một chiều


24

24

Biên soạn: ThS. Huỳnh Thành Lộc


8
1210134 - Nhập môn lập trình

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}
Before calling method: a[0] = 5
static void Main(string[] args)
{ Inside method: a[0] = -3
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

-3 -7
a
Main 9 8 2 7

Bài 6: Mảng một chiều


25

25

TRUYỀN THAM TRỊ KIỂU MẢNG


static void Change(int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
} Before calling method: a[0] = 5
static void Main(string[] args) Inside method: a[0] = -3
{ After calling method: a[0] = 9
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}

Main 9 8 2 7

Bài 6: Mảng một chiều


26

26

TRUYỀN THAM TRỊ KIỂU MẢNG

§ Nhận xét:
• Đối số phải là một mảng đã được khởi tạo;
• Tham số nhận giá trị là tham chiếu đến vùng giá trị của đối số
à tham số và đối số cùng tham chiếu đến 1 vùng giá trị;
• Khi có câu lệnh thay đổi tham chiếu của tham số thì không
ảnh hưởng đến đối số.

Bài 6: Mảng một chiều


27

27

Biên soạn: ThS. Huỳnh Thành Lộc


9
1210134 - Nhập môn lập trình

TRUYỀN THAM CHIẾU KIỂU MẢNG

§ Sử dụng từ khóa: ref / out tương tự như kiểu dữ liệu


giá trị

parameter

a
argument 5 8 2 7

Bài 6: Mảng một chiều


28

28

TRUYỀN THAM CHIẾU KIỂU MẢNG


static void Change(ref int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}

static void Main(string[] args)


{
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(ref a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

a
Main 9 8 2 7

Bài 6: Mảng một chiều


29

29

TRUYỀN THAM CHIẾU KIỂU MẢNG


static void Change(ref int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
}
Before calling method: a[0] = 5
static void Main(string[] args)
{ Inside method: a[0] = -3
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(ref a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

-3 -7
a
Main 9 8 2 7

Bài 6: Mảng một chiều


30

30

Biên soạn: ThS. Huỳnh Thành Lộc


10
1210134 - Nhập môn lập trình

TRUYỀN THAM CHIẾU KIỂU MẢNG


static void Change(ref int[] a)
{
a[0] = 9;
a = new int[2] {-3, -7};
Console.WriteLine($"Inside method: a[0] = {a[0]}");
} Before calling method: a[0] = 5
static void Main(string[] args) Inside method: a[0] = -3
{ After calling method: a[0] = -3
int[] a = new int[4] {5, 8, 2, 7};
Console.WriteLine($"Before calling method: a[0] = {a[0]}");
Change(ref a);
Console.WriteLine($"After calling method: a[0] = {a[0]}");
}
Change

-3 -7
a
Main

Bài 6: Mảng một chiều


31

31

TRUYỀN THAM CHIẾU KIỂU MẢNG

§ Nhận xét:
• Thao tác trên tham số cũng chính là thao tác trên đối số trong
lời gọi hàm
• Tham chiếu ref: đối số phải là mảng đã được khởi tạo;
• Tham chiếu out: đối số có thể là mảng chưa được khởi tạo;

Bài 6: Mảng một chiều


32

32

VẬN DỤNG

§ Bài tập 3: Định nghĩa các hàm nhập mảng sau:


• Hàm InputArray1(…): có tham số là một mảng một chiều chứa
các số nguyên đã được khởi tạo trước, yêu cầu người dùng
nhập giá trị cho các phần tử của mảng.

• Hàm InputArray2(…): có tham số là một mảng một chiều chứa


các số nguyên chưa được khởi tạo trước, yêu cầu người
dùng nhập kích thước mảng n, khởi tạo mảng và nhập giá trị
cho các phần tử của mảng.

• Hàm InputArray3(…): không có tham số, yêu cầu người dùng


nhập kích thước mảng n, khởi tạo mảng và nhập giá trị cho
các phần tử của mảng. Hàm trả về kết quả là mảng số
nguyên vừa nhập.

Bài 6: Mảng một chiều


33

33

Biên soạn: ThS. Huỳnh Thành Lộc


11
1210134 - Nhập môn lập trình

VẬN DỤNG

§ Bài tập 4: Định nghĩa hàm PrintArray(…) dùng để in


giá trị các phần tử của một mảng một chiều chứa các
số nguyên theo thứ tự đảo ngược, các phần tử cách
nhau bởi ký tự khoảng trắng.

§ Ví dụ: Mảng a = {4, 7, 9, 2, 3}


Kết quả in ra màn hình: 3 2 9 7 4

Bài 6: Mảng một chiều


34

34

VẬN DỤNG

§ Bài tập 5: Định nghĩa các hàm tính tổng sau:


• Hàm SumArray(…): tính và trả về tổng tất cả phần tử của một
mảng một chiều chứa các số nguyên cho trước.

• Hàm SumOfEven(…): tính và trả về tổng tất cả phần tử là số


chẵn của một mảng một chiều chứa các số nguyên cho trước.

• Hàm SumOfOdd(…): tính và trả về tổng tất cả phần tử là số lẻ


của một mảng một chiều chứa các số nguyên cho trước

Bài 6: Mảng một chiều


35

35

VẬN DỤNG

§ Bài tập 6: Định nghĩa các hàm tìm kiếm sau:


• Hàm FindX(…): tìm và trả về vị trí phần tử đầu tiên có giá trị
bằng x, nếu không có trả về -1.

• Hàm FindMin(…): tìm và trả về vị trí phần tử có giá trị nhỏ


nhất trong mảng, nếu có nhiều phần tử có giá trị nhỏ nhất thì
trả về vị trí đầu tiên.

• Hàm FindMax(…): tìm và trả về vị trí phần tử có giá trị lớn


nhất trong mảng, nếu có nhiều phần tử có giá trị lớn nhất thì
trả về vị trí cuối cùng.

Bài 6: Mảng một chiều


36

36

Biên soạn: ThS. Huỳnh Thành Lộc


12
1210134 - Nhập môn lập trình

NỘI DUNG

§ Giới thiệu kiểu dữ liệu List<T>


§ Bài tập vận dụng

Bài 6: Mảng một chiều


37

37

VẬN DỤNG

§ Bài tập 6: Định nghĩa các hàm hiệu chỉnh mảng sau:
• Hàm AddLast(…, int x): thêm phần tử có giá trị x vào cuối
mảng.

• Hàm InsertAt(…, int i, int x): thêm phần tử có giá trị x vào vị trí
thứ i trong mảng (0 ≤ i ≤ n, n là kích thước của mảng).

• Hàm RemoveAt(…, int i): xóa phần tử tại vị trí thứ i trong
mảng (0 ≤ i < n, n là kích thước của mảng).

Bài 6: Mảng một chiều


38

38

KIỂU DỮ LIỆU LIST<T>

§ List<T>: là kiểu dữ liệu dùng để lưu một danh sách các


phần tử cùng kiểu, có kích thước tự động tăng thêm
khi cần thiết.
§ Khởi tạo:
• List<T>(): khởi tạo danh sách rỗng với kích thước mặc định

List<int> myList = new List<int>();


• List<T>(Int32): khởi tạo danh sách rỗng với kích thước cụ thể

List<int> myList = new List<int>(10);

Bài 6: Mảng một chiều


39

39

Biên soạn: ThS. Huỳnh Thành Lộc


13
1210134 - Nhập môn lập trình

KIỂU DỮ LIỆU LIST<T>

§ Thuộc tính:
• Capacity: trả về tổng số phần tử đã được cấp phát
• Count: trả về số phần tử thực tế trong danh sách

List<int> myList1 = new List<int>();


Console.WriteLine(myList1.Count); //0
Console.WriteLine(myList1.Capacity); //0

List<int> myList2 = new List<int>();


Console.WriteLine(myList2.Count); //0
Console.WriteLine(myList2.Capacity); //10

Bài 6: Mảng một chiều


40

40

KIỂU DỮ LIỆU LIST<T>

§ Một số thao tác cơ bản:


• Add(T): thêm phần tử vào cuối List
• Clear(): xóa toàn bộ phần tử trong List
• ToArray(): sao chép các phần tử từ List sang Array

List<int> myList = new List<int>(); myList.Add(6);


Console.WriteLine(myList.Count); //0 Console.WriteLine(myList.Count); //5
Console.WriteLine(myList.Capacity); //0 Console.WriteLine(myList.Capacity); //8

myList.Add(5); int[] arr = myList.ToArray(); //arr = {5, 7, 2, 3, 6}


Console.WriteLine(myList.Count); //1
Console.WriteLine(myList.Capacity); //4 myList.Clear();
Console.WriteLine(myList.Count); //0
myList.Add(7); myList.Add(2); myList.Add(3); Console.WriteLine(myList.Capacity); //8
Console.WriteLine(myList.Count); //4
Console.WriteLine(myList.Capacity); //4
Bài 6: Mảng một chiều
41

41

VẬN DỤNG

§ Bài tập 6: Định nghĩa các hàm tìm kiếm sau:


• Hàm FindAllX(…): tìm và trả về danh sách các vị trí của các
phần tử có giá trị bằng x trong mảng một chiều chứa các số
nguyên.

• Hàm FindAllOdd(…): tìm và trả về danh sách các phần tử


chẵn trong mảng một chiều chứa các số nguyên.

Bài 6: Mảng một chiều


42

42

Biên soạn: ThS. Huỳnh Thành Lộc


14
1210134 - Nhập môn lập trình

VẬN DỤNG

§ Bài tập 7: Định nghĩa các hàm sau:


• Hàm PrintDistinct(…): in các giá trị phân biệt trong mảng một
chiều chứa các số nguyên ra màn hình.

• Hàm CountFreq(…): đếm tần số của các giá trị xuất hiện trong
mảng một chiều chứa các số nguyên.

Bài 6: Mảng một chiều


43

43

VẬN DỤNG

§ Bài tập 7: Định nghĩa các hàm sắp xếp sau:


• Hàm SortAsc(…): sắp xếp các phần tử trong mảng một chiều
chứa các số nguyên theo thứ tự tăng dần.

• Hàm SortDesc(…): sắp xếp các phần tử trong mảng một


chiều chứa các số nguyên theo thứ tự giảm dần.

Bài 6: Mảng một chiều


44

44

THUẬT TOÁN INTERCHANGE SORT

§ Ý tưởng Sắp xếp đổi chỗ trực tiếp:


• Bắt đầu từ phần tử đầu tiên, lần lượt so sánh phần tử này với
các phần tử còn lại trong dãy. Nếu cặp nào không đúng thứ tự
thì trực tiếp hoán vị cặp phần tử đó;
• Lặp lại quá trình trên với phần tử thứ 2, thứ 3, …, thứ n-2 (kế
phần tử cuối).

Bài 6: Mảng một chiều


45

45

Biên soạn: ThS. Huỳnh Thành Lộc


15
1210134 - Nhập môn lập trình

THUẬT TOÁN INTERCHANGE SORT

§ Thuật toán Sắp xếp đổi chỗ trực tiếp:


i=0
WHILE i < n – 1
j=i+1
WHILE j < n
IF a[i] > a[j]
Swap(a[i], a[j])
ENDIF
j=j+1
ENDWHILE
i=i+1
ENDWHILE

Bài 6: Mảng một chiều


46

46

THUẬT TOÁN INTERCHANGE SORT

0 1 2 3 4
i j So sánh Hoán vị
5 2 8 7 1
0 1 a[0], a[1] a[0], a[1] 2 5 8 7 1
2 a[0], a[2] - 2 5 8 7 1
3 a[0], a[3] - 2 5 8 7 1
4 a[0], a[4] a[0], a[4] 1 5 8 7 2
1 2 a[1], a[2] - 1 5 8 7 2
3 a[1], a[3] - 1 5 8 7 2
4 a[1], a[4] a[1], a[4] 1 2 8 7 5
2 3 a[2], a[3] - 1 2 7 8 5
4 a[2], a[4] a[2], a[4] 1 2 5 8 7
3 4 a[3], a[4] a[3], a[4] 1 2 5 7 8

Bài 6: Mảng một chiều


47

47

TỔNG KẾT

§ Hiểu khái niệm kiểu dữ liệu Mảng


§ Hiểu cách khai báo hàm có tham số kiểu
tham chiếu
§ Hiểu và vận dụng kiểu dữ liệu Mảng một
chiều

Bài 6: Mảng một chiều


48

48

Biên soạn: ThS. Huỳnh Thành Lộc


16

You might also like