Tìm max và min trong mảng C++

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

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 giải 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.

Bạn đang đọc: Tìm max và min trong mảng C++

Với mảng ở trên thì tất cả chúng ta sẽ tìm max bằng cách kiểm tra lần lượt những thành phần như sau :

  1. Giả sử max là số tiên phong 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
  2. Tìm thấy 3 lớn hơn 2. Do đó gán 3 vào max và thực thi tìm kiếm số lớn hơn 3 về phía cuối mảng
  3. Tìm thấy 4 lớn hơn 3. Do đó gán 4 vào max. Do 4 là thành phần ở đầu cuối nên kết thúc giải quyết và 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++:




int maxElement(const int* array, size_t size){

assert(array != NULL);
assert(size >= 1);


int max = array[0];


for (size_t i = 1; i < size; ++i) {
if (max < array[i]) {
max = array[i];
}
}
return max;
}

Hàm tìm min trong mảng C++:




int minElement(const int* array, size_t size){

assert(array != NULL);
assert(size >= 1);


int min = array[0];


for (size_t i = 1; i < size; ++i) {
if (min > array[i]) {
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:



using namespace std;


int maxElement(const int* array, size_t size){

assert(array != NULL);
assert(size >= 1);


int max = array[0];


for (size_t i = 1; i < size; ++i) {
if (max < array[i]) {
max = array[i];
}
}
return max;
}


int minElement(const int* array, size_t size){

assert(array != NULL);
assert(size >= 1);


int min = array[0];


for (size_t i = 1; i < size; ++i) {
if (min > array[i]) {
min = array[i];
}
}
return min;
}


void input_array(int array[], int length){


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);


int max = maxElement(array,n);
cout << "max= "<< max << endl;


int min = minElement(array,n);
cout << "min= " << min <
}

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= 8
min= 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ì thành phần tiên phong sẽ là thành phần nhỏ nhất, và thành phần ở đầu cuối sẽ là thành phần lớn nhất .trái lại thì sau khi sắp xếp mảng theo thứ tự giảm dần, thì thành phần tiên phong sẽ là thành phần lớn nhất, và thành phần sau cuối sẽ là thành phần nhỏ nhất .Về cách sắp xếp mảng trong C + +, Kiyoshi cũng đã trình diễn ở bài viết sau đây :

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.



using namespace std;






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);


qsort(array, length, sizeof(int), compareIntDesc);



cout << "max= "<< array[0] < cout << "min= "<< array[length-1];

return 0;
}

Kết quả:

max= 8
min= 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 khám phá những kỹ năng và kiến thức sâu hơn về C + + trong những bài học kinh nghiệm tiếp theo .