數組是最簡單的一種數據結構。我們經常碰到的一個基本問題,就是尋找整個數組中最大的數,或者最小的數。這時,我們都會掃描一遍數組,把最大(最小)的數找出來。如果我們需要同時找出最大,最小的數呢?
下面給出具體的代碼:
//對於原數組進行了調換
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;
}
執行結果:
這段代碼比較簡單,相信大家一看就明白,所以我就不再贅述!!!