数组是最简单的一种数据结构。我们经常碰到的一个基本问题,就是寻找整个数组中最大的数,或者最小的数。这时,我们都会扫描一遍数组,把最大(最小)的数找出来。如果我们需要同时找出最大,最小的数呢?
下面给出具体的代码:
//对于原数组进行了调换
void getmax_min(int *a,int n,int *max,int *min)
{
int i = 0;
int t ;
*max = *min = a[0];
for(i = 0;i < n ;i += 2){
if(a[i] < a[i + 1]){
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
for(i = 0;i < n; i += 2){
if(*max < a[i]){
*max = a[i];
}
}
for(i = 1;i < n;i+=2){
if(*min > a[i])
*min = a[i];
}
}
//改进对原数组不进行修改
void getmax_minvalue(int *a,int n,int *max,int *min)
{
int i;
*max = *min = a[0];
for(i = 0;i < n; i++){
if(a[i] > *max){
*max = a[i];
}else if(a[i] < *min){
*min = a[i];
}
}
}
主程序:
int main(int argc,char**argv)
{
int n;
int *a = NULL;
int i;
int max = -1,min = -1;
while(1){
printf("请输入n值:(-1 quit)\n");
scanf("%d",&n);
if(n == -1){
printf("error!\n");
exit(1);
}
a = (int *)malloc(sizeof(int) * n);
bzero(a,sizeof(int) * n);
printf("请输入元素值:\n");
for(i = 0;i < n ;i++){
scanf("%d",a + i);
}
// getmax_min(a,n,&max,&min);
//getmax_minvalue(a,n,&max,&min);
printf("max:%5d,min:%5d\n",max,min);
free(a);
}
return 0;
}
执行结果:
这段代码比较简单,相信大家一看就明白,所以我就不再赘述!!!