Nhập môn · Mảng
Tìm Min và Max trong mảng
Duyệt qua từng phần tử và so sánh để tìm giá trị nhỏ nhất và lớn nhất — nền tảng của mọi bài toán thao tác trên mảng.
Bài toán
Cho mảng số nguyên a[] có n phần tử.
Hãy tìm giá trị nhỏ nhất (min) và giá trị lớn nhất (max) trong mảng đó.
💡
Ý tưởng: Khởi tạo
min và max bằng phần tử đầu tiên (a[0]),
sau đó duyệt từ chỉ số 1 đến n-1 và cập nhật nếu tìm thấy giá trị nhỏ hơn hoặc lớn hơn hiện tại.
Từng bước thực hiện
- Gán
min = max = a[0] - Lặp
itừ 1 đếnn - 1 - Nếu
a[i] < min→ cập nhậtmin = a[i] - Nếu
a[i] > max→ cập nhậtmax = a[i] - Sau vòng lặp,
minvàmaxlà kết quả
Cài đặt bằng C
min_max.c
#include <stdio.h> // Hàm tìm min và max trong mảng void findMinMax(int a[], int n, int *min, int *max) { // Khởi tạo min, max bằng phần tử đầu tiên *min = a[0]; *max = a[0]; for (int i = 1; i < n; i++) { if (a[i] < *min) // Tìm thấy giá trị nhỏ hơn *min = a[i]; if (a[i] > *max) // Tìm thấy giá trị lớn hơn *max = a[i]; } } int main() { int a[] = {3, 7, 1, 9, 4, 6, 2}; int n = sizeof(a) / sizeof(a[0]); int min, max; findMinMax(a, n, &min, &max); printf("Mảng: "); for (int i = 0; i < n; i++) printf("%d ", a[i]); printf("\nMin = %d\n", min); printf("Max = %d\n", max); return 0; }
✅
Output:
Mảng: 3 7 1 9 4 6 2Min = 1Max = 9
Demo tương tác
🎮 Tự thử nghiệm
Nhập mảng:
Nhập mảng và nhấn Chạy để xem kết quả...
Phân tích độ phức tạp
| Trường hợp | Thời gian | Không gian | Ghi chú |
|---|---|---|---|
| Tốt nhất | O(n) | O(1) | Luôn phải duyệt hết mảng |
| Trung bình | O(n) | O(1) | Không phụ thuộc dữ liệu |
| Tệ nhất | O(n) | O(1) | Tất cả trường hợp như nhau |
⚠️
Lưu ý: Hàm trên không kiểm tra mảng rỗng (
n == 0).
Trong thực tế, cần thêm điều kiện kiểm tra trước khi truy cập a[0].
Biến thể: Tìm vị trí (chỉ số)
Đôi khi cần biết phần tử min/max nằm ở chỉ số nào, không chỉ giá trị:
min_max_index.c
int indexOfMin(int a[], int n) { int minIdx = 0; for (int i = 1; i < n; i++) if (a[i] < a[minIdx]) minIdx = i; return minIdx; } int indexOfMax(int a[], int n) { int maxIdx = 0; for (int i = 1; i < n; i++) if (a[i] > a[maxIdx]) maxIdx = i; return maxIdx; }