1 int findsecond(int a[], int size) 2 { 3 int max = a[0]; 4 int second = a[1]; 5 int index = 0; 6 for (int i = 0; i < size; ++i) 7 { 8 if (max < a[i]) 9 { 10 second = max; 11 index = i; 12 max = a[i]; 13 } 14 else if (max > a[i]) 15 { 16 if (second < a[i]) 17 { 18 second = a[i]; 19 index = i; 20 } 21 else if (second > a[i]) 22 { 23 if (second == max) 24 { 25 second = a[i]; 26 index = i; 27 } 28 } 29 } 30 } 31 32 return second; 33 }
index为第二大的数在数组中的下标;
在写算法的过程中,验证发现如果去掉第21行~第28行,
当初始化max和second相等且为整个数组最大,
即a[0]和a[1]相等且为数组最大时,
求出的第二大的数值会出错。
由此发现,去掉上述几行后,max和second初始化为相等且数组最大时,
此算法的结果都会出错,所得结果为最大的数。
特此记录
时间: 2024-10-26 19:33:36