一次遍历求出数组中的最小值跟第二小值

相信很多人都遇到过此问题,因为数据结构中哈夫曼编码中创建哈夫曼树的时候就需要从树的"集合"中选择出来2个权值最小的来。

思路:定义2个临时变量temp1,temp2,分别用来存储数组中的第一个(a[0])跟第二个元素(a[1]),并且进行相应比较,让temp1存放二者中小的那个值,temp2存放大的。

        从数组第3个元素a[2]开始遍历,取值,跟temp2进行对比,如果比temp2小,那需要进一步跟temp1进行比较,倘若比temp1还小,那说明此值是目前已知的最小值,

   而此步之前的最小值temp1,现在成功变身成为了第二小的值。因此需要进行以下替换操作。temp2=temp1,temp1=a[i];

代码实现:

  

 1 #include<iostream>
2 using namespace std;
3
4 void sort(int a[],int n,int *s1,int *s2)
5 {
6 int temp1,temp2;//临时变量
7 if(a[0]<a[1])
8 {
9 temp1=a[0];
10 temp2=a[1];
11 }
12 else
13 {
14 temp1=a[1];
15 temp2=a[0];
16 }
17 for(int i=2;i<n;i++)
18 {
19 if(a[i]<temp2)
20 {
21 if(a[i]<temp1)
22 {
23 temp2=temp1;
24 temp1=a[i];
25 }
26 else
27 temp2=a[i];
28 }
29 }
30 *s1=temp1;
31 *s2=temp2;
32 }
33 int main()
34 {
35 int a[10]={12,34,56,43,32,21,65,67,78,99};
36 int min1,min2;
37 sort(a,10,&min1,&min2);
38 cout<<min1<<""<<min2<<endl;
39 return 0;
40 }

 

posted @ 2011-11-21 17:14  不洗脸都帅  阅读(2567)  评论(20编辑  收藏  举报