Tìm phần tử nhỏ nhất trong mảng C | Laptrinhcanban.com

HOME › >>

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:

#include <stdio.h>
#include <assert.h>

/*Hàm tìm phần tử nhỏ nhất trong mảng C*/
void 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];
}
}
printf("min= %d\n", min);
}

int main(void){
int array[100], n;
printf(">>Nhap so phan tu: ");
scanf("%d", &n);

printf(">>Nhap phan tu:\n");
for (int i = 0; i < n; i++) scanf("%d", &array[i]);

/*Tìm phần tử nhỏ nhất trong mảng C*/
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:
88
7
2
5
32
4
min= 2

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:

#include <stdio.h>
#include <assert.h>

/*Hàm tìm vị trí phần tử nhỏ nhất trong mảng C*/
void 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 vị trí phần tử nhỏ nhất là phần tử đầu tiên của mảng.
int min = array[0];
int min_index= 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ị nhỏ nhất nếu tìm ra số nhỏ hơn
min = array[i];
min_index =i;
}
}
printf("Phan tu nho nhat= %d\n", min);
printf("Vi tri phan tu nho nhat= %d\n", min_index);
}

int main(void){
int array[100], n;
printf(">>Nhap so phan tu: ");
scanf("%d", &n);

printf(">>Nhap phan tu:\n");
for (int i = 0; i < n; i++) scanf("%d", &array[i]);

/*Tìm phần tử nhỏ nhất trong mảng C*/
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:
88
7
5
2
32
4
Phan tu nho nhat= 2
Vi tri phan tu nho nhat= 3

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.

#include <stdio.h>
#include <stdlib.h>

/*Đị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 tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b){
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}


int main(void){
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), compareIntAsc);

/*Phần tử nhỏ thứ 2 chính là phần tử đứng thứ 2 trong mảng sau sắp xếp*/
printf("Phan tu nho nhat trong mang= %d\n", array[0]);
printf("Phan tu nho thu 2 trong mang= %d\n", 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.

#include <stdio.h>
#include <stdlib.h>

/*Đị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 kiểm tra số chẵn lẻ trong C*/
int check_odd_even(int n){
//flag = 1 => số lẻ
//flag = 0 => số chẵn

int flag = 1;
if( n % 2 == 0 ) flag= 0;
return flag;
}


/*Tạo hàm so sánh tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b){
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}


int main(void){
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), compareIntAsc);

/*Phần tử phần tử chẵn nhỏ nhất trong mảng chính là phần tử chẵn đầu tiên*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = check_odd_even(x);
if (check == 0) { //Tìm thấy phần tử phần tử chẵn nhỏ nhất
printf("Phan tu chan nho nhat trong mang= %d\n", array[i]);
break;
}
}

/*Phần tử phần tử lẻ nhỏ nhất trong mảng chính là phần tử lẻ đầu tiên*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = check_odd_even(x);
if (check == 1) { //Tìm thấy phần tử phần tử lẻ nhỏ nhất
printf("Phan tu le nho nhat trong mang= %d\n", 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.

URL Link

https://laptrinhcanban.com/c/lap-trinh-c-co-ban/mang-trong-c/tim-phan-tu-nho-nhat-trong-mang-c/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.