Tìm phần tử nhỏ nhất trong mảng C++

Hướng dẫn cách tìm phần tử nhỏ nhất trong mảng C++. Bạn sẽ học được cách tìm phần tử nhỏ nhất trong mảng C++, cách tìm vị trí phần tử nhỏ nhất trong mảng C++, cách tìm phần tử nhỏ thứ hai trong mảng C++, cũng như cách tìm phần tử chẵn nhỏ nhất trong mảng sau bài học này.

Tìm phần tử nhỏ nhất trong mảng C++

Để tìm phần tử nhỏ nhất trong mảng C++, chúng ta sử dụng tới logic mà Kiyoshi đã hướng dẫn trong bài: Tìm max và min trong mảng C++

Ý tưởng ở đây là giả sử min (giá trị nhỏ 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 min, nếu số này nhỏ hơn min thì đổi giá trị của min thành số đó. Và làm như thế cho tới số cuối cùng trong mảng được kiểm tra thì sẽ ra phần tử nhỏ nhất trong mảng ban đầu.

Và chúng ta viết hàm tìm phần tử nhỏ nhất trong mảng C++ trong chương trình như sau:



using

namespace

std

;



void

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

}


}


cout

<<

"min= "

<< min;

}



int

main

()

{

int

array

[

100

], n;

cout

<<

">>Nhap so phan tu: "

;

cin

>> n;


cout

<<

">>Nhap phan tu:\n"

;

for

(

int

i =

0

; i < n; i++)

cin

>>

array

[i];



minElement(

array

,n);


return

0

;

}


Kết quả phép tìm phần tử nhỏ nhất trong mảng C++ như sau:

>>Nhap so phan tu: 6


>>Nhap phan tu:


12 1 7 84 6 8


min= 1


Tìm vị trí phần tử nhỏ nhất trong mảng C++

Chúng ta cũng có thể biến tấu hàm ở trên và tìm vị trí phần tử nhỏ nhất trong mảng C++, bằng cách thay vì trả về giá trị của phần tử nhỏ nhất tìm thấy thì chúng ta sẽ trả về cả index của phần tử đó.

Và chúng ta viết hàm tìm vị trí phần tử nhỏ nhất trong mảng C++ trong chương trình như sau:



using

namespace

std

;



void

minElement

(

const

int

*

array

,

size_t

size){


assert(

array

!=

NULL

);

assert(size >=

1

);



int

min =

array

[

0

];

int

min_index=

0

;


for

(

size_t

i =

1

; i < size; ++i) {

if

(min >

array

[i]) {

min =

array

[i];

min_index =i;


}


}


cout

<<

"Phan tu nho nhat= "

<< min <<

endl

;

cout

<<

"Vi tri phan tu nho nhat= "

<< min_index;

}



int

main

()

{

int

array

[

100

], n;

cout

<<

">>Nhap so phan tu: "

;

cin

>> n;


cout

<<

">>Nhap phan tu:\n"

;

for

(

int

i =

0

; i < n; i++)

cin

>>

array

[i];



minElement(

array

,n);


return

0

;

}


Kết quả phép tìm phần tử nhỏ nhất trong mảng C++ như sau:

>>Nhap so phan tu: 6


>>Nhap phan tu:


4 2 6 3 88 3


Phan tu nho nhat= 2


Vi tri phan tu nho nhat= 1


Tìm phần tử nhỏ thứ hai trong mảng C++

Để tìm phần tử nhỏ thứ hai trong mảng C++, chúng ta sẽ dùng tới phương pháp 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 mà Kiyoshi đã hướng dẫn trong bài: Tìm max và min trong mảng C++

Ý tưởng ở đây là chúng ta sẽ sắp xếp mảng theo thứ tự tăng dần. Và sau khi sắp xếp thì phần tử nhỏ nhất mảng là phần tử đầu tiên, và phần tử nhỏ thứ 2 chính là phần tử đứng thứ 2 trong mảng.

Một cách tổng quát thì chúng ta cũng có thể tìm phần tử nhỏ thứ n trong mảng bằng phương pháp sắp xếp này.

Về sắp xếp mảng trong C++ thì chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài sau: Sắp xếp mảng trong C++

Sau đây là ví dụ về cách tìm phần tử nhỏ thứ hai trong mảng C++ bằng cách sắp xếp mảng tăng dần.



using

namespace

std

;






int

compareIntAsc

(

const

void

* a,

const

void

* b){

int

aNum = *(

int

*)a;

int

bNum = *(

int

*)b;


return

aNum - bNum;

}




int

main

()

{

int

array

[] = {

5

,

4

,

7

,

2

,

8

,

7

,

3

};

int

length= SIZE_OF_ARRAY(

array

);



qsort(

array

, length,

sizeof

(

int

), compareIntAsc);



cout

<<

"Phan tu nho nhat trong mang= "

<<

array

[

0

]<<

endl

;

cout

<<

"Phan tu nho thu 2 trong mang= "

<<

array

[

1

];


return

0

;

}


Kết quả phép tìm phần tử nhỏ thứ hai trong mảng C++ như sau:

Phan tu nho nhat trong mang= 2


Phan tu nho thu 2 trong mang= 3


Tìm phần tử chẵn nhỏ nhất trong mảng

Chúng ta cũng có thể áp dụng phương pháp tìm phần tử nhỏ nhất và nhỏ nhất trong mảng C++ bằng cách sắp xếp mảng ở trên để tìm phần tử chẵn nhỏ nhất trong mảng

Ý tưởng ở đây là chúng ta sẽ sắp xếp mảng theo thứ tự giảm dần. Và sau khi sắp xếp thì các phần tử sẽ được sắp xếp theo thứ tự từ nhỏ nhất đến nhỏ nhất, tính từ đầu mảng. Khi đó, chỉ cần chúng ta tìm ra phần tử chẵn đầu tiên tính từ đầu mảng, thì đó chính là phần tử chẵn nhỏ nhất trong mảng cần tìm.

Một cách tương tự thì chúng ta cũng có thể tìm phần tử lẻ nhỏ nhất trong mảng theo cách này.

Để kiểm tra một phần tử trong mảng là chẵn hay lẻ, chúng ta sẽ dùng tới một trong hai phương pháp mà Kiyoshi đã hướng dẫn trong bài: Kiểm tra số chẵn lẻ trong C++

Và để sắp xếp mảng trong C++ thì chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài: Sắp xếp mảng trong C++

Sau đây là ví dụ về cách tìm phần tử phần tử chẵn nhỏ nhất và phần tử lẻ nhỏ nhất trong mảng bằng cách sắp xếp mảng giảm dần.



using

namespace

std

;






int

check_odd_even

(

int

n){




int

flag =

1

;

if

( n %

2

==

0

) flag=

0

;

return

flag;

}





int

compareIntAsc

(

const

void

* a,

const

void

* b){

int

aNum = *(

int

*)a;

int

bNum = *(

int

*)b;


return

aNum - bNum;

}




int

main

()

{

int

array

[] = {

5

,

4

,

7

,

2

,

8

,

7

,

3

};

int

length= SIZE_OF_ARRAY(

array

);



qsort(

array

, length,

sizeof

(

int

), compareIntAsc);



for

(

size_t

i =

0

; i < length; ++i) {

int

x =

array

[i];

int

check = check_odd_even(x);

if

(check ==

0

) {

cout

<<

"Phan tu chan nho nhat trong mang= "

<<

array

[i]<<

endl

;

break

;

}


}




for

(

size_t

i =

0

; i < length; ++i) {

int

x =

array

[i];

int

check = check_odd_even(x);

if

(check ==

1

) {

cout

<<

"Phan tu le nho nhat trong mang= "

<<

array

[i];

break

;

}


}



return

0

;

}


Kết quả chương trình tìm phần tử phần tử chẵn nhỏ nhất và phần tử lẻ nhỏ nhất trong mảng như sau:

Phan tu chan nho nhat trong mang= 2


Phan tu le nho nhat trong mang= 3


Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách tìm phần tử nhỏ nhất 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.