6-4 数组中选择两个最小值【武汉理工大学】

编写选择函数SelectTwoMin ()实现从数组中选择两个最小的数据元素,并记录其在数组中的下标位置。

函数接口定义:

c 复制代码
void SelectTwoMin(int array[],int n,int *s1,int *s2)

其中 array , n , s1,s2都是用户传入的参数。 array 是存储数据的数组;n 是数组的大小;s1选择出来的最小值的下标,s2选择出来的次小值的下标。

裁判测试程序样例:

c 复制代码
#include<stdio.h>
void SelectTwoMin(int array[],int n,int *s1,int *s2);//选择两个最小的数据元素
void main()
{int x[100];
 int i,n,a,b;
 scanf("%d",&n);
 for(i=0;i<n;i++)
 scanf("%d",&x[i]);
 SelectTwoMin(x,n,&a,&b);
 printf("min1=[%d],%d,min2=[%d],%d",a,x[a],b,x[b]);
}
/* 请在这里填写答案 */

输入样例1:

输入2行,第一行中输入一个整数,说明数组的大小;第二行输入数组的值

10 6

3 1 4 9 8 3 7 5 2

输出样例1:

分别输出最小值和次小值的下标位置和值

min1=[2],1,min2=[9],2

输入样例2:

输入2行,第一行中输入一个整数,说明数组的大小;第二行输入数组的值;此时最小值和次小值相同

10

1 3 1 6 4 1 9 8 7 5

输出样例2:

分别输出最小值和次小值的下标位置和值,输出的最小值是第一次出现的相同值,次小值是第二次出现的相同值

min1=[0],1,min2=[2],1

c 复制代码
void SelectTwoMin(int array[], int n, int *s1, int *s2) {
    

    int min1 = 0;
    int min2 = -1;

    for (int i = 1; i < n; i++) {
        if (array[i] < array[min1]) {
            if (min2 == -1 || array[i] < array[min2]) {
                min2 = min1;
            }
            min1 = i;
        } else if (min2 == -1 || array[i] < array[min2]) {
            min2 = i;
        }
    }

    *s1 = min1;
    *s2 = min2;
}
相关推荐
hsjkdhs4 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
立志成为大牛的小牛4 小时前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
星空下的曙光4 小时前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法
Algo-hx4 小时前
数据结构入门 (七):从“链接”到“分支” —— 初探树与二叉树
数据结构
小贾要学习5 小时前
【数据结构】C++实现红黑树
数据结构·c++
StarPrayers.6 小时前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
爱吃橘的橘猫6 小时前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
235166 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
weixin_307779137 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json
柳安忆7 小时前
【论文阅读】Sparks of Science
算法