在最坏的情况下,利用n+(lgn的上限)-2次比较,即可找到n个元素中的第2小元素。(提示:同时找最小元素)
#include <string.h>
#include <time.h>
#define BUFFER_SIZE 10
void FirstAndSecond(int *a,int len,int *first,int *second)
{
int i=0;
int j=0;
if(a[0]<a[1])
{
*first=a[0];
*second=a[1];
}
else
{
*first=a[1];
*second=a[0];
}
for(i=2;i<len;i++)
{
if(*first>a[i])
{
*second=*first;
*first=a[i];
}
else
{
if(*second>a[i])
{
*second=a[i];
}
}
}
}
int main()
{
int i=0;
int min=0;
int max=0;
int a[BUFFER_SIZE];
printf("随机生成的数组:\n");
srand((unsigned)time(NULL));
for(i=0;i<BUFFER_SIZE;i++)
{
a[i]=rand()%100;//归一化
printf("%d ",a[i]);
}
printf("\n");
FirstAndSecond(a,BUFFER_SIZE,&min,&max);
printf("最小值:min=%d\n最大值:max=%d\n",min,max);
system("pause");
return 0;
}