69,322
社区成员
发帖
与我相关
我的任务
分享
void fun(int* arr,int pos, int* s, int* t,int n);
功能:int arr[n];求解a[0:pos] 里的最小两个值,*和*t.
pos<n;
求解最通俗的算法,并附思路说明,不能修改数组,所以不能排序
我脑子不好使啊,
#include <stdio.h>
#include <stdlib.h>
void fun(int* arr, int pos, int* s, int* t, int* ss, int* ts, int n) // 增加两个参数ss和ts,用于返回*s和*t的下标
{
if(pos < 1 || pos > n -1)
{
printf("参数错误\n");
return;
}
int min1; // 最小的数
int min2; // 第二小的数
// 给min1和min2赋初值,min1为*(arr + 0)和*(arr + 1)中较小的一个,min2为另一个。
if(*(arr + 0) < *(arr + 1))
{
min1 = *(arr + 0);
min2 = *(arr + 1);
*ss = 0;
*ts = 1;
}
else
{
min1 = *(arr + 1);
min2 = *(arr + 0);
*ss = 1;
*ts = 0;
}
// 从下标2开始到pos为止,遍历数组
for(int i = 2; i <= pos; ++i)
{
if(*(arr + i) < min2) // 如果数组中的元素小于min2
{
if(*(arr + i) < min1) // 判断该元素是否小于min1
{
int temp = min1;
min1 = *(arr + i);
min2 = temp;
*ts = *ss;
*ss = i;
}
else
{
min2 = *(arr + i);
*ts = i;
}
}
}
*s = min1;
*t = min2;
}
int main(int argc, char* argv[])
{
int min1;
int min2;
int ss;
int ts;
int arr[] = {1, 3, 77, 33, 26, 179, 2, 9, 8, 7, 4, 11, 99};
fun(arr, 6, &min1, &min2, &ss, &ts, sizeof(arr) / sizeof(int));
printf("The minimum two numbers are:%d, %d, \nthe corresponding subscript is %d, %d respectively.\n", min1, min2, ss, ts);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void fun(int* arr, int pos, int* s, int* t, int n)
{
if(pos < 1 || pos > n -1)
{
printf("参数错误\n");
return;
}
int min1; // 最小的数
int min2; // 第二小的数
// 给min1和min2赋初值,min1为*(arr + 0)和*(arr + 1)中较小的一个,min2为另一个。
if(*(arr + 0) < *(arr + 1))
{
min1 = *(arr + 0);
min2 = *(arr + 1);
}
else
{
min1 = *(arr + 1);
min2 = *(arr + 0);
}
// 从下标2开始到pos为止,遍历数组
for(int i = 2; i <= pos; ++i)
{
if(*(arr + i) < min2) // 如果数组中的元素小于min2
{
if(*(arr + i) < min1) // 判断该元素是否小于min1
{
int temp = min1;
min1 = *(arr + i);
min2 = temp;
}
else
{
min2 = *(arr + i);
}
}
}
*s = min1;
*t = min2;
}
int main(int argc, char* argv[])
{
int min1;
int min2;
int arr[] = {1, 3, 77, 33, 26, 179, 2, 9, 8, 7, 4, 11, 99};
fun(arr, 6, &min1, &min2, sizeof(arr) / sizeof(int));
printf("%d, %d\n", min1, min2);
return 0;
}