要求:
给出一组数据,找出其中最小的一个数。
代码实现:
//方法一
#include <stdio.h>
#include<assert.h>
void SelectMin(int* ar, int n) {
assert(ar != nullptr);
if (n <= 1) return;
int posmin = 0;
for (int i = 0; i < n; i++) {
if (ar[posmin] > ar[i]) {
posmin = i;
}
}
printf("Min:%d", ar[posmin]);
}
int main() {
int ar[] = { 23,12,45,56,67,78,89,100,34,8 };
int n = sizeof(ar) / sizeof ar[0];
SelectMin(ar, n);
return 0;
}
//方法二
#include <stdio.h>
#include<assert.h>
void SelectMin(int* ar, int n) {
assert(ar != nullptr);
if (n <= 1) return;
int posmin = ar[0];
for (int i = 0; i < n; i++) {
if (posmin>ar[i]) {
posmin = ar[i];
}
}
printf("Min:%d",posmin);
}
int main() {
int ar[] = { 23,12,45,56,67,78,89,100,34,8 };
int n = sizeof(ar) / sizeof ar[0];
SelectMin(ar, n);
return 0;
}
要求:
给出一组数据,找出其中最小的一个数和第二小的数。
代码实现:
#include <stdio.h>
#include<assert.h>
void Select2Min(int* ar, int n) {
assert(ar != nullptr);
if (n < 2) return;
int min1 = ar[0] < ar[1] ? ar[0] : ar[1];//第一小
int min2 = ar[0] < ar[1] ? ar[1] : ar[0];//第二小
for (int i = 2; i < n; i++) {
if (min1>ar[i]) { //遍历数组 找出第一小和第二小
min2 = min1;
min1 = ar[i];
}
else if (min2 > ar[i]) {
min2 = ar[i];
}
}
printf("Min1:%d Min2:%d",min1,min2);
}
int main() {
int ar[] = { 23,12,45,56,67,78,89,100,34,8 };
int n = sizeof(ar) / sizeof ar[0];
Select2Min(ar, n);
return 0;
}
ps:碰到指针就必须要判空
//方法二
#include <stdio.h>
#include<assert.h>
#include<limits.h>
void Select2Min(int* ar, int n,int*pmin1,int *pmin2) {
assert(ar != nullptr);
assert(pmin1 != nullptr && pmin2 != nullptr);//碰到指针就必须要判空
if (n < 2) return;
int min1 = ar[0] < ar[1] ? ar[0] : ar[1];
int min2 = ar[0] < ar[1] ? ar[1] : ar[0];
for (int i = 2; i < n; i++) {
if (min1>ar[i]) {
min2 = min1;
min1 = ar[i];
}
else if (min2 > ar[i]) {
min2 = ar[i];
}
}
*pmin1 = min1;
*pmin2 = min2;
}
int main() {
int ar[] = { 23,12,45,56,67,78,89,100,34,8 };
int n = sizeof(ar) / sizeof ar[0];
int min1 = INT_MAX,min2 = INT_MAX;
Select2Min(ar, n,&min1,&min2);
printf("min1:%d min2:%d\n", min1, min2);
return 0;
}
//方法三
#include <stdio.h>
#include<assert.h>
#include<limits.h>
struct MinNode {
int min1;
int min2;
};
MinNode Select2Min(int* ar, int n) {
assert(ar != nullptr);
MinNode x = { INT_MIN,INT_MIN };
if (n < 2) return x;
int min1 = ar[0] < ar[1] ? ar[0] : ar[1];
int min2 = ar[0] < ar[1] ? ar[1] : ar[0];
for (int i = 2; i < n; i++) {
if (min1>ar[i]) {
min2 = min1;
min1 = ar[i];
}
else if (min2 > ar[i]) {
min2 = ar[i];
}
}
x.min1 = min1;
x.min2 = min2;
printf("min1:%d min2:%d\n",x.min1,x.min2);
}
int main() {
int ar[] = { 23,12,45,56,67,78,89,100,34,8 };
int n = sizeof(ar) / sizeof ar[0];
Select2Min(ar, n);
return 0;
}