怎么在一个整型数组中找出最小的两个元素的下标

如何在一个整型数组中找出最小的两个元素的下标
问题描述:已知一个整型数组中长度为 n ,且数组中的数据无序.现要求出数组中最小的两个数的下标.
我写的一个程序如下:
#include<stdio.h>
void main()
{
int a[10]={2, 0, 2, -10, 3, -1, -2, -3, 8, 0};
int s1 = 0, s2 = 0, i;
for(i = 0; i < 10; i++)
{
if(a[i] < a[s1])
{
s1 = i;
}
}
for(i = 0,s2 = (s1 + 1)%10; i < 10; i++)
{
if(a[i] < a[s2] && i != s1)
{
s2 = i;
}
}
printf("最小两数的下标分别为: %d, %d\n\n", s1, s2);
printf("最小两数为: %d, %d\n\n", a[s1], a[s2]);
}

这个程序貌似没问题,可是当我把这种方法用到哈夫曼算法上时却没得到想要的结果.大家都知道哈夫曼算法,每次都要从 n 个结点中找到两个权值最小的结点.我就是用这种方法来找的,可是不对啊???

------解决方案--------------------

#include <iostream>
#include <cmath>
#include <windows.h>
using namespace std;

int main()
{
int a[10]={2, 0, 2, -10, 3, -1, -2, -3, 8, 0};
int s1 = 0;
int s2 = 1;

if (a[s1] > a[s2])
{
swap(s1, s2);
}

for(int i = 2; i < 10; i++)
{
if (a[i] < a[s2])
{
s2 = i;
if (a[s1] > a[s2])
{
swap(s1, s2);
}
}
}
printf("最小两数的下标分别为: %d, %d\n\n", s1, s2);
printf("最小两数为: %d, %d\n\n", a[s1], a[s2]);

system("pause");
return 0;
}

------解决方案--------------------
始终与目前最小两个数中的较大数比较,如果小,就换掉较大的数
------解决方案--------------------
你这代码好像没有问题呵。。你确定是这部分代码造成的错误? 而且既然你能找到错误的情况。。自己调试一下不就可以了。。