"求数组中大小相差最小的两个数"的高效算法
发布网友
发布时间:2024-10-21 21:39
我来回答
共2个回答
热心网友
时间:2024-11-04 18:23
// 什么叫高效算法,因为存在比较,都应该遍历一遍吧。。
// 看下面的代码能帮到你吗?
#include <stdio.h>
#include <string.h>
#include <math.h>int main()
{
int nArr1[10] = {1,3,4,5,10,6,8,20,11,24};
int nArr[10] = {0};
int i, j;
int flag;
// 存放最小值和两个数
int nMin[3] = {0};
nMin[0] = 0xffff;
// 首先将数组1的值拷贝一份。
memcpy(nArr, nArr1, sizeof(nArr1)); // 然后执行循环相减
for (i = 0; i < 10; i++)
{
for (j = 0; j< 10; j++)
{
flag = nArr1[i] - nArr[j];
// 相差最小,排除相等的情况,如果把相等计算在内,则该算法不成立
if (flag == 0)
{
continue;
}
if (abs(flag) < nMin[0])
{
nMin[0] = abs(flag);
nMin[1] = i;
nMin[2] = j;
}
}
}
printf("the min = %d, %d %d\n", nMin[0], nArr1[1], nArr1[2]);
return 0;
}
热心网友
时间:2024-11-04 18:22
先排序,再扫描一遍即可。