Sắp xếp các phần tử trong mảng

Một phần của tài liệu Giao An TH_9 (Trang 51 - 54)

Có nhiều phương pháp sắp xếp trong mảng, ở đây các bạn chỉ biết qua hai cách, đó là dùng phương pháp chọn (selection sort) và phương pháp đổi chỗ, hay còn gọi là phương pháp nổi bọt (bubble sort).

1. Phương pháp chọn (selection sort)

Đây là một trong những thuật toán sắp xếp đơn giản nhất hoạt động như sau: Đầu tiên tìm phần tử nhỏ nhất trong mảng và hoán vị nó với phần tử trong vị trí đầu tiên, sau đó tìm phần tử nhỏ nhất kế tiếp và hoán vị nó với phần tử trong vị trí thứ hai, và tiếp tục theo phương pháp này cho đến khi toàn bộ trong mảng đã được sắp xếp. Phương pháp này được gọi là sắp xếp chọn vì nó làm việc bằng cách lặp lại việc “chọn” phần tử nhỏ nhất còn lại. Bạn xem thuật toán sau:

Var i,j,min,tam : integer; Begin

For i:= 1 to N-1 do Begin

min:=i;

For j:=i+1 to N do

if a[i] < a[min] then min:=j;

Tam:=a[min]; a[min]:=a[i]; a[i]:= tam; End;

End.

Bạn xem chương trình hoàn chỉnh như sau: Program Sapxepchon;

Const N=10; Var

Mang : Array[1..N] of integer; i,j,min,tam : integer;

Begin

(*Nhập các phần tử của mảng*) For i:= 1 to N do

Begin

Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘); Readln(Mang[i]); End; (*Dùng thuật toán chọn*) For i:= 1 to N-1 do Begin min := i; For j:= i+1 to N do

if Mang[j] < Mang[min] then min:=j;

tam:= Mang[min]; Mang[min]:=Mang[i]; Mang[i]:=tam; End;

(*Xuất ra các phần tử của mảng sau khi đã sắp xếp) For i:= 1 to N do

Write(Mang[i], ‘ ‘); Readln;

End.

 Đầu tiên khai báo hằng số N=10, khai báo mảng có N phần tử kiểu nguyên. Biến i và j dùng cho vòng lặp For. Biến min chỉ phần tử nhỏ, biến tam để chứa thông tin tạm.

 Nhập N phần tử của mảng, dùng thuật toán sắp xếp chọn để sắp xếp lại các phần tử trong mảng từ nhỏ đến lớn. Xuất ra màn hình các giá trị đã sắp xếp.

 Chạy thử chương trình, nhập vào 10 số nguyên, bạn sẽ thấy kết quả.

2. Dùng phương pháp đổi chỗ (Bubble sort)

Đây là phương pháp cơ bản thường dùng, hoán vị các phần tử kề nhau, nếu cần, khi không cần đến một hoán vị nào khác ở một bước nào đó thì tập tin được sắp xong. Bạn xem thuật toán sau:

Var i,j,tam : integer; Begin

For i:= N Downto 1 do For j:=2 to i do

if a[j-1] > a[j] then Begin Tam:= a[j-1]; A[j-1]:= a[j]; A[j]:= tam; End; End.

Bạn xem chương trình hoàn chỉnh như sau: Program SapxepBubblesort;

Const N=10;

Var Mang : Array[1..N] of integer; i,j,tam : integer;

Begin

(*Nhập các phần tử của mảng*) For i:= 1 to N do

Begin

Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘); Readln(Mang[i]);

End;

(*Dùng thuật toán Bubble sort*) For i:= N downto 1 do

For j:=2 to i do

if Mang[j-1] < Mang[j] then Begin

tam:= Mang[j-1]; Mang[j-1]:=Mang[j]; Mang[j]:=tam; End;

(*Xuất ra các phần tử của mảng sau khi đã sắp xếp) For i:= 1 to N do

Write(Mang[i], ‘ ‘); Readln;

End.

TÓM LƯỢC

 Mảng chứa nhiều phần tử có cùng kiểu với nhau, các phần tử có chỉ số và có kiểu rời rạc.  Khai báo biến một chiều

Var

Mang : Array[1..n] of kiểu;  Khai báo biến hai chiều Var

Mang : Array[1..n. 1..m] of kiểu;

 Dùng một vòng lặp For để nhập các phần tử của mảng một chiều, dùng hai vòng lặp For lồng nhau để nhập các phần tử cho mảng hai chiều. Tương tự như vậy khi cần xuất dữ liệu của mảng ra màn hình.

 Để tìm kiếm một phần tử trong mảng, ta cũng dùng vòng lặp để duyệt tìm tuần tự (sequential search) các phần tử trong mảng.

 Khi muốn sắp xếp các phần tử trong mảng, ta dùng phương pháp chọn (Selection sort) hoặc phương pháp đổi chỗ (bubble sort)

PHẦN THỰC HÀNH:

1. Viết chương trình nhập vào một mảng các số nguyên (mảng một chiều và mảng hai chiều). a. Xuất ra màn hình các phần tử của mảng theo thứ tự nhập vào.

b. Xuất ra màn hình các phần tử của mảng theo thứ tự ngược lại (phần tử nhập sau cùng sẽ in ra trước).

2. Viết chương trình nhập vào hai mảng có số phần tử bằng nhau, tạo một mảng thứ ba bằng tổng của hai mảng đó (c[i]=a[i] + b[i]), Xuất ra màn hình các phần tử của cả ba mảng (mỗi mảng trên một dòng).

3. Viết chương trình in ra:

a. Phần tử lớn nhất của một mảng. b. Phần tử nhỏ nhất của một mảng. c. Tổng các phần tử của mảng. Ghi chú: Viết trên mảng một chiều và hai chiều.

4. Nhập vào một mảng số nguyên, cho biết có bao nhiêu phần tử lớn hơn 0, nhỏ hơn 0 và bằng 0 (viết trên mảng một chiều và hai chiều).

5. Nhập một mảng số nguyên, in ra bốn dòng a. Các số lẻ, cho biết số các số lẻ. b. Các số chẵn, cho biết các số chẵn. c. Các số là nguyên tố.

d. Các số không phải là số nguyên tố. (Viết trên mảng một chiều và hai chiều)

6. Nhập vào một mảng các số nguyên. a. in ra dãy số vừa nhập vào. b. in ra dãy số từ nhỏ đến lớn. c. in ra dãy số từ lớn đến nhỏ.

7. Viết chương trình nhập một mảng các số nguyên, in ra các phần tử của mảng (Không in phần tử có rồi)

Ví dụ: nhập dãy 1 5 3 4 4 5 in ra 1 5 3 4

8. Tương tự như trên nhưng là số thực.

9. Cho mảng A[1..9] với các phần tử là số nguyên a. Tính tổng các số lẻ có trong mảng.

b. Tính tổng các số chẵn có trong mảng. c. Tính tổng các số có trong mảng. d. Tính tổng các số dương có trong mảng.

10. Nhập vào một mảng có 10 số nguyên, tìm một số bất kỳ nhập vào từ bàn phím, nếu tìm thấy sẽ báo có, ngược lại báo không có.

11. Nhập vào một mảng với các phần tử là tên của các trái cây, nhập vào một tên trái cây, sẽ tìm kiếm trong mảng, nếu thấy thì báo có, ngược lại thì không báo gì hết.

12. Viết chương trình nhập vào một mảng số thực gồm 12 phần tử.

a. Sắp xếp theo thứ tự tăng dần bằng hai phương pháp chọn và đổi chỗ. b. Sắp xếp theo thứ tự giảm dần bằng hai phương pháp trên.

13. Nhập vào 20 số thực, thông báo ra màn hình

a. Một số thực nào đó có thuộc mảng hay không?

b. Trong mảng có bao nhiêu số thực bằng số cần tìm, các số đó ở vị trí nào của mảng.

BÀI CHƯƠNG TRÌNH CON (Sub program) CHƯƠNG TRÌNH CON (Sub program)

KIẾN THỨC YÊU CẦU:

 Biết khi nào cần sử dụng đến chương trình con, tầm vực hoạt động của nó.  Biết cách khai báo và sử dụng.

 Biết nắm vững vị trí khai báo biến.

KIẾN THỨC ĐẠT ĐƯỢC

 Biết các khái niệm về chương trình con.

 Biết cách khai báo và sử dụng chương trình con trong chương trình chính.

 Biết hai dạng của chương trình con là thủ tục (Procedure) và hàm (Function), các bước cơ bản để viết một chương trình con.

 Biết nắm vững biến toàn cục và biến địa phương, đặc biệt là tầm vực hoạt động của các biến loại này.

 Biết nắm vững cách truyền tham số cho chương trình con dưới dạng tham trị và tham biến.  Biết viết chương trình con dưới hai dạng thủ tục và hàm.

 Biết khái niệm về đệ quy và tính đệ quy của chương trình con

Một phần của tài liệu Giao An TH_9 (Trang 51 - 54)

Tải bản đầy đủ (DOC)

(69 trang)
w