Tìm Max Và Min Trong Mảng C++
Có thể bạn quan tâm
Hướng dẫn cách tìm max và min trong mảng C++. Bạn sẽ học được 2 cách căn bản để tìm phần tử lớn nhất và nhỏ nhất trong mảng mảng C++ sau bài học này.
Chúng ta có 2 phương pháp để tìm max và min trong mảng C++ như sau:
- Tự tạo hàm tìm phần tử lớn nhất và nhỏ nhất trong mảng C++
- Sắp xếp mảng để tìm phần tử lớn nhất và nhỏ nhất trong mảng C++
Tìm max và min trong mảng C++ bằng hàm tự tạo
Logic tìm max và min trong mảng C++
Ví dụ chúng ta có mảng int như sau:
| int array[] = {2, 0, 3, 1, 4}; |
Để tìm phần tử lớn nhất trong mảng C++, chúng ta sử dụng ý tưởng rất đơn giản. Giả sử max (giá trị lớn nhất của mảng) là số đầu tiên của mảng. Chúng ta sẽ lấy lần lượt các số còn lại trong mảng đem so sánh với max, nếu số này lớn hơn max thì đổi giá trị của max thành số đó. Và làm như thế cho tới số cuối cùng trong mảng được kiểm tra.

Với mảng ở trên thì chúng ta sẽ tìm max bằng cách kiểm tra lần lượt các phần tử như sau:
Giả sử max là số đầu tiên của mảng và bằng 2. Tiến hành tìm kiếm số lớn hơn 2 về phía cuối mảng
Tìm thấy 3 lớn hơn 2. Do đó gán 3 vào max và tiến hành tìm kiếm số lớn hơn 3 về phía cuối mảng
Tìm thấy 4 lớn hơn 3. Do đó gán 4 vào max. Do 4 là phần tử cuối cùng nên kết thúc xử lý.
Với việc tìm phần tử nhỏ nhất trong mảng C++, chúng ta cũng sử dụng logic tương tự. Tuy nhiên thay vì tìm số đầu tiên lớn hơn số đang xét, thì chúng ta sẽ làm ngược lại là tìm số đầu tiên nhỏ hơn số đang xét mà thôi.
Hàm tìm max và min trong mảng C++
Để hiện thực được logic ở trên, chúng ta sử dụng vòng lặp và viết các hàm tìm phần tử lớn nhất và nhỏ nhất trong mảng mảng C++ như sau:
Hàm tìm max trong mảng C++:
| #include <cassert>/*Hàm tìm max trong mảng C++*/int maxElement(const int* array, size_t size){ /*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/ assert(array != NULL); assert(size >= 1); //Giả định giá trị lớn nhất là giá trị đầu tiên của mảng. int max = array[0]; /*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị lớn nhất*/ for (size_t i = 1; i < size; ++i) { if (max < array[i]) { //Thay đổi giá trị max nếu tìm ra số lớn hơn max = array[i]; } } return max;} |
Hàm tìm min trong mảng C++:
| #include <cassert>/*Hàm tìm min trong mảng C++*/int minElement(const int* array, size_t size){ /*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/ assert(array != NULL); assert(size >= 1); //Giả định giá trị nhỏ nhất là giá trị đầu tiên của mảng. int min = array[0]; /*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị nhỏ nhất*/ for (size_t i = 1; i < size; ++i) { if (min > array[i]) { //Thay đổi giá trị min nếu tìm ra số nhỏ hơn min = array[i]; } } return min;} |
Ứng dụng các hàm trên, chúng ta viết chương trình tìm max và min trong mảng C++ như sau:
| #include <iostream>#include <cassert>using namespace std;/*Hàm tìm max trong mảng C++*/int maxElement(const int* array, size_t size){ /*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/ assert(array != NULL); assert(size >= 1); //Giả định giá trị lớn nhất là giá trị đầu tiên của mảng. int max = array[0]; /*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị lớn nhất*/ for (size_t i = 1; i < size; ++i) { if (max < array[i]) { //Thay đổi giá trị max nếu tìm ra số lớn hơn max = array[i]; } } return max;}/*Hàm tìm min trong mảng C++*/int minElement(const int* array, size_t size){ /*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/ assert(array != NULL); assert(size >= 1); //Giả định giá trị nhỏ nhất là giá trị đầu tiên của mảng. int min = array[0]; /*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị nhỏ nhất*/ for (size_t i = 1; i < size; ++i) { if (min > array[i]) { //Thay đổi giá trị min nếu tìm ra số nhỏ hơn min = array[i]; } } return min;}/*Tạo hàm nhập mảng 1 chiều trong C++*/void input_array(int array[], int length){ //array: tên mảng //length: độ dài mảng for (short i = 0; i < length; i++) cin >> array[i];}int main(){ int array[100], n; cout << ">>Nhap so phan tu: "; cin >> n; cout << ">>Nhap phan tu:\n"; input_array(array,n); /*Tìm max trong mảng*/ int max = maxElement(array,n); cout << "max= "<< max << endl; /*Tìm min trong mảng*/ int min = minElement(array,n); cout << "min= " << min <<endl;} |
Kết quả của phép tìm phần tử lớn nhất và nhỏ nhất trong mảng C++ bằng hàm tự tạo sẽ như dưới đây. Bạn hãy thử chạy chương trình và kiểm tra nhé.
| >>Nhap so phan tu: 8>>Nhap phan tu:8 2 1 7 6 5 3 2 max= 8min= 1 |
Tìm phần tử lớn nhất và nhỏ nhất trong mảng C++ bằng cách sắp xếp mảng
Ngoài cách kiểm tra từng phần tử để tìm ra max và min, chúng ta cũng có thể sắp xếp mảng theo thứ tự tăng dần hoặc giảm dần rồi sau đó mới tìm các giá trị lớn nhất và nhỏ nhất.
Ví dụ, sau khi sắp xếp mảng theo thứ tự tăng dần, thì phần tử đầu tiên sẽ là phần tử nhỏ nhất, và phần tử cuối cùng sẽ là phần tử lớn nhất.
Ngược lại thì sau khi sắp xếp mảng theo thứ tự giảm dần, thì phần tử đầu tiên sẽ là phần tử lớn nhất, và phần tử cuối cùng sẽ là phần tử nhỏ nhất.
Về cách sắp xếp mảng trong C++, Kiyoshi cũng đã trình bày ở bài viết sau đây:
- Xem thêm: Sắp xếp mảng trong C++
Sau đây là ví dụ về cách tìm phần tử lớn nhất và nhỏ nhất trong mảng C++ bằng cách sắp xếp mảng giảm dần.
| #include <iostream>#include <cstdlib>using namespace std;/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))/*Tạo hàm so sánh sử dụng trong hàm qsort*/int compareIntDesc(const void* a, const void* b){ int aNum = *(int*)a; int bNum = *(int*)b; return bNum - aNum;}int main(){ int array[] = {5, 4, 7, 2, 8, 7, 3}; int length= SIZE_OF_ARRAY(array); /*Sử dụng hàm qsort để sắp xếp mảng giảm dần*/ qsort(array, length, sizeof(int), compareIntDesc); /*max là phần tử đầu tiên, min là phần tử cuối cùng*/ cout << "max= "<< array[0] <<endl; cout << "min= "<< array[length-1]; return 0;} |
Kết quả:
| max= 8min= 2 |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn cách tìm max và min trong mảng C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.
URL Link
https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/mang-trong-cpp/tim-max-va-min-trong-mang-cpp/
Từ khóa » Tìm Max Trong Mảng
-
Bài 43. Tìm Số Nhỏ Nhất, Lớn Nhất Trong Mảng - Lập Trình Không Khó
-
Tìm Số Lớn Nhất Trong Mảng C/C++
-
Tìm Phần Tử Lớn Nhất, Nhỏ Nhất Trong Mảng C/C++
-
(Lập Trình C) Tìm Min Và Max Trong Mảng - Banhoituidap
-
Học C/C++ - Tìm Max Và Min Trong Mảng 1 Chiều - YouTube
-
Tìm Giá Trị Lớn Nhất/nhỏ Nhất Trong Mảng
-
Đệ Quy Tìm Max, Min - Programming - Dạy Nhau Học
-
C/C++ Trả Lời Câu Hỏi Tìm Số Nhỏ Nhất, Lớn Nhất Trong Mảng Một Chiều
-
Tìm Số Max, Min Trong Mảng 2 Chiều | Nền Tảng
-
Max: Hàm Tìm Giá Trị Lớn Nhất Một Mảng, Dãy Số Trong Php
-
Tìm Vị Trí Của Phần Tử Nhỏ Nhất Trong Mảng Một Chiều Bằng C / C++
-
Cách Tìm Số Lớn Nhất Trong Mảng C# Cực Dễ - Freetuts
-
[Tự Học Lập Trình C/C++] Viết Hàm Con Trỏ Tìm Giá Trị Lớn Nhất Trong ...
-
Tìm Giá Trị Lớn Nhất Trong Mảng 1 Chiều - Branium Academy