思路:先找出数组内的最大值,分别赋给变量v1,v2,第一个for循环找出第一个最小值,并记录下标,赋给p1,第二个循环找第二个最小值,如果此时循环中j=p1,那么代表j下标处的数是第一最小值,直接执行continue跳过此下标处的数,进行下一次的比较;目前来看此代码是可以完成任务的,这是我在写哈曼树的构造算法想出来的,如果有大佬看出有什么问题,欢迎提出修改
#include<stdio.h>
int Get_max(int* arr, int len)
{
int i = 0;
int m = arr[0];
for (; i < len; i++)
{
if (m < arr[i])
{
m = arr[i];
}
}
return m;
}
void Get_min(int* arr, int* a, int* b,int len)
{
int i, j, v1, v2, p1, p2;
//v1记录第一个最小数,p1记录第一个最小数的下标,v2记录第二个最小数,p2记录第二个最小数的下标
v1 = Get_max(arr, len);
v2 = Get_max(arr, len);
for (i = 0; i < len; i++)
{
if (v1 >= arr[i])
{
v1 = arr[i];
p1 = i;
}
}
for (j = 0; j < len; j++)
{
if (v2 >= arr[j])
{
if (j == p1)
//如果j等于p1,那么此时j下标中的数是数组内的第一个最小值,直接执行continue将此坐标中的值跳过,继续比较下一个
continue;
v2 = arr[j];
p2 = j;
}
}
*a = v1;
*b = v2;
//*a = p1;/*传下标*/
//*b = p2;
}
int main()
{
int a, b;
int arr[6] = { 10,7,2,6,5 ,10};
int len = sizeof(arr) / sizeof(arr[0]);
Get_min(arr, &a, &b,len);
printf("%d %d", a, b);
return 0;
}