###はじめに
配列の中の最大値を求めるアルゴリズムについて質問します.
そのアルゴリズムについて友人と議論になり,客観的意見が欲しくて質問しました.
###サンプルコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <stdbool.h> 4#include <time.h> 5#include <limits.h> 6 7bool putMaxVal1(int array[],int size){ 8 if(size<=0){ return false; } 9 int maxVal=array[0]; 10 int i; 11 for(i=1; i<size; i++){ 12 if(array[i]>maxVal) maxVal=array[i]; 13 } 14 printf("maxVal1 = %d\n",maxVal); 15 return true; 16} 17 18bool putMaxVal2(int array[],int size){ 19 if(size<=0){ return false; } 20 int maxVal=INT_MIN ; 21 int i; 22 for(i=0; i<size; i++){ 23 if(array[i]>maxVal) maxVal=array[i]; 24 } 25 printf("maxVal2 = %d\n",maxVal); 26 return true; 27} 28 29int main(void){ 30 int array[100]={0}; 31 32 srand(time(NULL)); 33 int i; 34 for(i=0; i<sizeof array/sizeof array[0]; i++){ 35 array[i]=1+rand()%1000; 36 printf("[%3d] %3d\n",i+1,array[i]); 37 } 38 printf("maxVal1:%s\n",putMaxVal1(array,sizeof array/sizeof array[0])?"TRUE":"FALSE"); 39 printf("maxVal2:%s\n",putMaxVal2(array,sizeof array/sizeof array[0])?"TRUE":"FALSE"); 40 41 printf("maxVal1:%s\n",putMaxVal1(array,-1)?"TRUE":"FALSE"); 42 printf("maxVal2:%s\n",putMaxVal2(array,-1)?"TRUE":"FALSE"); 43 44 return 0; 45}
###質問
0. 二つの関数(maxVal1 と maxVal2)のどちらのうがいいでしょうか.
質問内容を変更す.
「どちらを推奨しますか?」「どちらのほうが個人的に好きですか?」
2.引数sizeに-1を入れたところ二つの関数には以下のような違いが見られましたが,これは処理系によって違うのでしょうか.
maxVal1 = 984 maxVal2 = -2147483648
###補足など
質問について:
「いいでしょうか」という質問が不適切であるという指摘をいただいた為,「推奨しますか?」,「どちらのコードのほうが好きですか?」という質問に変更します.
コードについて:コードを修正しました.修正前コードは以下の通りです.
C
1 2/*このコードは修正前のものです.*/ 3/*このコードは修正前のものです.*/ 4/*このコードは修正前のものです.*/ 5/*このコードは修正前のものです.*/ 6 7#include <stdio.h> 8#include <stdlib.h> 9#include <time.h> 10#include <limits.h> 11 12int maxVal1(int array[],int size){ 13 int maxVal; 14 int i; 15 for(i=0; i<size; i++){ 16 if(0==i) maxVal=array[0]; 17 if(array[i]>maxVal) maxVal=array[i]; 18 } 19 printf("maxVal1 = %d\n",maxVal); 20 return maxVal; 21} 22 23int maxVal2(int array[],int size){ 24 int maxVal=INT_MIN ; 25 int i; 26 for(i=0; i<size; i++){ 27 if(array[i]>maxVal) maxVal=array[i]; 28 } 29 printf("maxVal2 = %d\n",maxVal); 30 return maxVal; 31} 32 33int main(void){ 34 int array[100]={0}; 35 36 srand(time(NULL)); 37 int i; 38 for(i=0; i<sizeof array/sizeof array[0]; i++){ 39 array[i]=1+rand()%1000; 40 printf("[%3d] %3d\n",i+1,array[i]); 41 } 42 maxVal1(array,sizeof array/sizeof array[0]); 43 maxVal2(array,sizeof array/sizeof array[0]); 44 45 return 0; 46}
回答8件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。