Mảng
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| array/əˈreɪ/ | mảng |
| element/ˈelɪmənt/ | phần tử |
| index/ˈɪndeks/ | chỉ số |
| lower bound/ˈləʊə baʊnd/ | giới hạn dưới |
| upper bound/ˈʌpə baʊnd/ | giới hạn trên |
| dimension/daɪˈmenʃn/ | chiều |
| nested loops/ˈnestɪd luːps/ | vòng lặp lồng nhau |
| linear search/ˈlɪnɪə sɜːtʃ/ | tìm kiếm tuyến tính |
| bubble sort/ˈbʌbl sɔːt/ | sắp xếp nổi bọt |
Ghế 14C
- Một rạp hát có 300 ghế. Hệ thống đặt chỗ của nó không có 300 biến gọi là
Seat1A,Seat1B,Seat1C. Nó có một mảng, và vé của bạn là một địa chỉ trỏ vào đó: hàng 14, ghế C. - Một tên, hàng trăm giá trị, mỗi giá trị tìm thấy bởi một con số. Thêm một hàng thì mã không thay đổi; lặp qua các con số và bạn đã kiểm tra mọi ghế.
- Hầu hết mọi thuật toán Paper 2 duyệt qua một mảng: tìm kiếm, cộng tổng, sắp xếp, tìm giá trị lớn nhất của nó.
- Bài học này là từ vựng, các khai báo, và bốn thuật toán mà giám khảo yêu cầu bằng giả thuật và bằng lời nói.
Từ vựng
- Một mảng là cấu trúc dữ liệu chứa một số lượng cố định các phần tử có cùng kiểu dữ liệu dưới cùng một định danh, mỗi phần tử truy cập bằng một chỉ số.
- Cận dưới và cận trên là chỉ số hợp lệ đầu tiên và cuối cùng. Số lượng phần tử là cận trên − cận dưới + 1.
- Số chiều là số chỉ số cần cho một phần tử: một cho danh sách, hai cho bảng.
- Trong
ThisArray[n] ← 42mảng có một chiều, chỉ số là biếnINTEGERn, và phần tử tại chỉ số đó nhận42.

Một định danh, một chỉ số cho mỗi phần tử, cận ở cả hai đầu
Một mảng lưu trữ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một mảng là một tập hợp có thứ tự của các mục cùng kiểu được truy cập bằng chỉ số. (Một bản ghi nhóm các kiểu khác nhau.)
Một mảng là một cấu trúc dữ liệu chứa nhiều giá trị của ______ kiểu dưới một tên.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mỗi giá trị được truy cập bằng chỉ số của nó.
DECLARE Marks : ARRAY[0:99] OF INTEGER khai báo một mảng có ____ phần tử.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Giới hạn trên trừ giới hạn dưới cộng một: 99 − 0 + 1 = 100. Cả hai giới hạn đều là chỉ số hợp lệ.
Ví dụ đã giải quyết: khai báo mảng mà bài tập cần
- Một khai báo cần định danh, cận và kiểu dữ liệu.
- 120 lần đọc có thể có dấu thập phân:
DECLARE Data : ARRAY[1:120] OF REAL - Bảng 150 hàng và hai cột văn bản:
DECLARE Names : ARRAY[1:150, 1:2] OF STRING - Nói số lượng nếu được hỏi:
[0:99]chứa 100 phần tử, không phải 99.
Khai báo nào chứa bảng 150 hàng và 2 cột văn bản?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Hai chiều, mỗi chiều có một cận dưới và cận trên, cùng với kiểu phần tử. Tùy chọn thứ hai là một danh sách dài; tùy chọn thứ ba không có kiểu; tùy chọn thứ tư không có cận dưới.
Xử lý mảng 1-D
DECLARE Names : ARRAY[1:5] OF STRING
Names[3] ← "Cara"
FOR i ← 1 TO 5
OUTPUT Names[i]
NEXT i
- Một vòng lặp
FORtừ cận dưới đến cận trên truy cập mỗi phần tử đúng một lần. - Đối với tổng, đếm, cực đại hoặc cực tiểu, thiết lập biến chạy trước vòng lặp và cập nhật nó bên trong.
Mảng 2-D
DECLARE Grid : ARRAY[1:3, 1:4] OF INTEGER
Grid[2, 3] ← 99 // row 2, column 3
- Chỉ số đầu là hàng, chỉ số thứ hai là cột. Vòng lặp lồng nhau truy cập mỗi ô: vòng ngoài遍历 hàng, vòng trong遍历 cột.
- Dùng 1-D cho một dãy đơn lẻ và 2-D khi dữ liệu có hai chiều tự nhiên, chẳng hạn như lưới ghế hoặc bảng điểm theo học sinh và môn học.

Grid[row, column], luôn theo thứ tự đó
Chỉ số mảng 2-D bằng [hàng, cột]
Một mảng 2-D là một lưới. Grid[row, column] truy cập đúng một ô — đổi hàng và cột để xem bạn rơi vào giá trị nào.
Trong Grid[2, 3], ô nào được truy cập?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Chỉ số đầu tiên là hàng, chỉ số thứ hai là cột — vì vậy là hàng 2, cột 3.
Ví dụ minh họa: tìm kiếm tuyến tính có thể báo "không tìm thấy"
- Tìm kiếm tuyến tính kiểm tra từng phần tử theo thứ tự từ đầu cho đến khi tìm thấy mục tiêu hoặc đạt đến cuối.
FoundAt ← -1
FOR i ← 1 TO n
IF A[i] = Target THEN
FoundAt ← i
ENDIF
NEXT i
IF FoundAt = -1 THEN
OUTPUT "Not found"
ELSE
OUTPUT "Found at ", FoundAt
ENDIF
-1không bao giờ là chỉ số hợp lệ, nên nó có nghĩa là "không tìm thấy". Khởi tạo nó trước vòng lặp và kiểm tra nó sau. Một tìm kiếm không bao giờ nói "không tìm thấy" sẽ mất điểm.
Tìm kiếm tuyến tính tìm thấy một giá trị bằng cách:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Tìm kiếm tuyến tính kiểm tra các phần tử từng cái một từ đầu cho đến khi tìm thấy mục tiêu (hoặc đạt đến cuối).
Đặt FoundAt thành -1 trước khi tìm kiếm tuyến tính cho phép chương trình báo "không tìm thấy" sau vòng lặp.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
-1 không bao giờ là chỉ số hợp lệ, vì vậy nếu nó không thay đổi sau vòng lặp thì mục tiêu không nằm trong mảng.
Giá trị lớn nhất, và vị trí của nó
Largest ← A[1]
Position ← 1
FOR i ← 2 TO n
IF A[i] > Largest THEN
Largest ← A[i]
Position ← i
ENDIF
NEXT i
OUTPUT Largest, " at ", Position
- Bắt đầu
Largesttừ phần tử đầu tiên, không bao giờ bắt đầu từ 0: mảng có thể chứa toàn số âm. - Hình dạng tương tự đếm hoặc xuất các phần tử không trống: so sánh từng phần tử với dấu hiệu cho phần tử chưa sử dụng,
""hoặc-1, và chỉ đếm những phần tử khác biệt.
Sắp xếp nổi bọt
- Một sắp xếp nổi bọt thực hiện nhiều lượt duyệt qua mảng để so sánh các cặp phần tử kề nhau và hoán đổi những cặp bị sai thứ tự, cho đến khi một lượt duyệt nào đó không còn hoán đổi nào nữa.
- Sau mỗi lượt duyệt, giá trị lớn nhất chưa được sắp xếp đã nổi lên cuối mảng, nên lượt duyệt tiếp theo có thể dừng sớm hơn một vị trí.
REPEAT
Swapped ← FALSE
FOR Index ← 1 TO Limit - 1
IF Data[Index] > Data[Index + 1] THEN
Temp ← Data[Index]
Data[Index] ← Data[Index + 1]
Data[Index + 1] ← Temp
Swapped ← TRUE
ENDIF
NEXT Index
Limit ← Limit - 1
UNTIL Swapped = FALSE

Mỗi lượt duyệt đưa giá trị lớn nhất còn lại lên cuối mảng
Sắp xếp các bước của một lượt sắp xếp nổi, và kết thúc của nó theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
đặt lại cờ, quét và trô đổi, thu hẹp giới hạn, dừng lại khi một lượt hoàn toàn không thực hiện trô đổi nào.
Ví dụ minh họa: nơi đặt các dấu hiệu sắp xếp nổi bọt
- Vòng lặp ngoài lặp lại cho đến khi một lượt duyệt không hoán đổi; cờ
Swappedđược đặt lại thànhFALSEở đầu mỗi lượt duyệt và được gánTRUEbên trongIF. - Ba dòng hoán đổi thông qua biến tạm thời. Hai dòng sẽ mất đi giá trị của chúng.
- Giới hạn thu hẹp, giảm đi một đơn vị mỗi lượt duyệt, vì giá trị lớn nhất đã nằm ở cuối mảng.
- Bằng lời, đối với câu hỏi tinh chỉnh từng bước: lặp lại cho đến khi đã sắp xếp; trong mỗi lượt duyệt so sánh các cặp phần tử kề nhau; hoán đổi bất kỳ cặp nào bị sai thứ tự; sau mỗi lượt duyệt, giá trị lớn nhất chưa được sắp xếp nằm ở cuối mảng.
Tính năng nào mang điểm trong thuật toán sắp xếp nổi hiệu quả? Chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Cờ, trô đổi với biến tạm thời, thu hẹp giới hạn: đó là những điểm chính. Sao chép mảng không phải là một phần của thuật toán.
Ví dụ minh họa: loại bỏ và chèn
- Loại bỏ một mục: tìm chỉ số của nó bằng tìm kiếm tuyến tính; di chuyển mọi phần tử phía sau đó một vị trí về phía đầu để lấp khoảng trống; đánh dấu phần tử cuối cùng là chưa sử dụng, hoặc giảm bộ đếm.
- Chèn vào mảng đã sắp xếp: tìm chỉ số đầu tiên có phần tử lớn hơn; di chuyển phần tử đó và mọi phần tử phía sau nó một vị trí về phía cuối, bắt đầu từ phần tử cuối cùng; lưu giá trị mới vào khoảng trống.
- Di chuyển từ cuối khi mở khoảng trống và từ đầu khi đóng khoảng trống, nếu không bạn sẽ ghi đè lên giá trị mà bạn đang định di chuyển.
Mảng chứa nhiều mục CÙNG một loại được truy cập qua chỉ số, trong khi bản ghi nhóm các trường có (có thể) KIỂU KHÁC NHAU được truy cập qua tên.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mảng 2-D phù hợp với lưới (hàng × cột); bản ghi phù hợp với một đối tượng được mô tả bởi nhiều trường có tên.
Điểm số dễ mất
[0:99]chứa 100 phần tử. Đếm cả hai cận.- Một chỉ số là một
INTEGER; một khai báo cần cả kiểu lẫn cận. Grid[row, column]: hàng trước. Hoán đổi thứ tự sẽ đọc ô sai trong mọi vòng lặp lồng nhau.- Một phép hoán đổi cần biến tạm thời; một phép tìm kiếm cần đường dẫn "không tìm thấy"; sắp xếp nổi bọt kết thúc khi một lượt duyệt không hoán đổi, không phải sau một số lượng lượt duyệt cố định.
Bạn đã nắm vững
- một mảng chứa một số lượng phần tử cùng kiểu cố định dưới một danh xưng duy nhất, truy cập bằng một chỉ số nằm giữa cận dưới và cận trên; count = upper − lower + 1
- 1-D là danh sách, 2-D là bảng
[row, column]được duyệt bởi các vòng lặp lồng nhau; khai báo với cả cận và kiểu - tìm kiếm tuyến tính:
FoundAt ← -1, vòng lặp, lưu chỉ số, kiểm tra sau vòng lặp; giá trị lớn nhất: bắt đầu từA[1], giữ nguyên vị trí - sắp xếp nổi bọt: các lượt duyệt so sánh và hoán đổi các phần tử kề nhau kèm biến tạm, một cờ
Swapped, giới hạn thu hẹp, cho đến khi một lượt duyệt không còn hoán đổi