一个数组内如何求出两个最小值

C语言一个数组内如何求出两个最小值,假设有一个int类型的数组,高效的算法来可能会好一些,我有个想法,不知道用排序算法是否可以



#include <stdio.h>
#include <stdlib.h>
void mymin()
{
    int a[10] = { 6,4,3,2,7,8,9,10,1,5 };
    int i, k, w;
    for (i = 0;i < 9;i++)
    {
        for (k = 0;k < 9 - i;k++)
        {
            if (a[k] > a[k + 1])
            {
                w = a[k];
                a[k] = a[k + 1];
                a[k + 1] = w;
            }
        }
    }
    printf("打印最小的两个值:\n%d,%d\n", a[0], a[1]);
}
int main()
{
    mymin();
    printf("End..........\n");
    system("pause");
    return 0;
}

高效学习C语言可以看我的主页或者专栏 https://blog.csdn.net/gzplyx?type=blog

没必要排序, 最简单的就是 循环数组 两轮 就行了

  • 第一轮 找最小的,记下下标
  • 第二轮 找下标不是第一轮的,剩下的最小的

只需要O(n)就可以,一趟比较就行啦

#include <stdio.h>
int main()
{
    int a[10] = {1,3,8,0,9,7,5,4,2,6};
    int min1,min2;
    min1=min2=a[0];
    for(int i=1;i<10;i++)
    {
        if(a[i] < min2)
        {
            min1 = min2;
            min2 = a[i];
        }
        else if(a[i] < min1)
            min1 = a[i];
    }
    printf("最小值为:%d,次小值为:%d\n",min2,min1);
}