关于数组内查找两个最小数

思路:先找出数组内的最大值,分别赋给变量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;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值