We assume that a[0] has first biggest and a[1] has the second biggest value.
Now check if this assumption is correct, if not, swap the values.
if( sbig > fbig ) { temp = sbig; sbig = fbig; fbig = temp; } |
Now since we have already checked with a[0] and a[1], we start the comparison from a[2], till N.
for(i=2; i < n ; i++) if(a[i] > fbig) { sbig = fbig; fbig = a[i]; } else if(a[i] > sbig) sbig = a[i]; |
Now, if a[i] contains a number which is bigger than fbig, we transfer the value of a[i] to fbig and the value present in fbig to sbig;
If the value of a[i] is not bigger than fbig, then we check it with sbig. If a[i] is bigger than sbig, then we assign the value of a[i] to sbig.
This way, at the end of the loop fbig will have the first biggest and sbig will have the second biggest element/number in the array.
Video Tutorial: Find First and Second Biggest In An Array, Without Sorting It: C
[youtube https://www.youtube.com/watch?v=DzZvT87WuGQ]
Full source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include < stdio.h > #include < conio.h > void main() { int a[20], N, i, fbig, sbig, temp; clrscr(); printf("Enter array limit\n"); scanf("%d", &N); printf("Enter %d array elements\n", N); for(i=0; i < n ; i++) scanf("%d", &a[i]); fbig = a[0]; sbig = a[1]; if( sbig > fbig ) { temp = sbig; sbig = fbig; fbig = temp; } for(i=2; i < n ; i++) if(a[i] > fbig) { sbig = fbig; fbig = a[i]; } else if(a[i] > sbig) sbig = a[i]; printf("First Big is %d and Second big is %d", fbig, sbig); getch(); } |
Output:
Enter array limit
6
Enter 6 array elements
99
108
777
723
786
999
First Big is 999 and Second big is 786