We can find the largest and second largest number of an integers array using the c language. This question is also important and asks by the interviewer in an interview.

Letâ€™s take an example, suppose here is an integer array iaData of 5 integers.

**int iaData[5] = {3, 5, 123, 6, 1};**

Here the largest number is 123 and the second largest number is 6.

A simple way to find the largest and second largest number is that sort the array in descending order and pick its first and second elements. Its first element will be the largest number and the second number will be the second largest number.The time complexity of this solution is O(n Log n).

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 40 41 | #include <stdio.h> #define SIZE_ARRAY(x) sizeof(x)/sizeof(x[0]); // Size of array int main() { int iaData[5] = {3,5,123,6,1}; int ArraySize = SIZE_ARRAY(iaData); int iLoop1 =0, iLoop2 =0; for(iLoop1 = 0; iLoop1 < ArraySize;iLoop1++) { for(iLoop2 = iLoop1+1; iLoop2 < ArraySize ; iLoop2++) { if(iaData[iLoop1] < iaData[iLoop2]) { iaData[iLoop1] ^= iaData[iLoop2]; iaData[iLoop2] ^= iaData[iLoop1]; iaData[iLoop1] ^= iaData[iLoop2]; } } } // Sorted array printf("\n\nSorted Array: "); for(iLoop1 = 0; iLoop1 < ArraySize;iLoop1++) printf("%d ",iaData[iLoop1]); // First element of sorted array printf("\n\nBigest element = %d\n",iaData[0]); //Second element of sorted array printf("\n\nSecond Biggest element = %d\n\n\n",iaData[1]); return 0; } |

**OutPut:**

Above method is not better because it scans the array twice. There is also another way to find the largest and second largest number in a single scan of the array. The time complexity of this solution is O(n).

Here is an algorithm to find two largest and second largest number in one traversal.

#### The algorithm to find largest and second largest number:

- Create two variable iFirstLargest and iSecondLargest.
- Initialize both variables as INT_MIN

iFirstLargest = INT_MIN

iSecondLargest = INT_MIN - Loop through all the elements and perform the below task

**1).**If the current element is bigger than iFirstLargest, then update iFirstLargest and iSecondLargest.

**2).**Else if the current element is bigger than iSecondLargest then update iSecondLargest.

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 40 41 42 43 | #include <stdio.h> #include <limits.h> #define SIZE_ARRAY(x) sizeof(x)/sizeof(x[0]); // Size of array int FindTwoLargestNumber(int *piListOfData , int iSizeOfArray) { int iLoop1= 0,iLoop2 =0; int iFirstLargest = INT_MIN; int iSecondLargest = INT_MIN; while(iLoop1 < iSizeOfArray) { if(piListOfData[iLoop1] > iFirstLargest) { iSecondLargest = iFirstLargest; iFirstLargest = piListOfData[iLoop1]; } else if((piListOfData[iLoop1] > iSecondLargest) && (piListOfData[iLoop1] !=iFirstLargest )) { iSecondLargest = piListOfData[iLoop1]; } iLoop1++; } printf("First largest Numbers = %d\nSecond largest Number = %d\n ",iFirstLargest,iSecondLargest); } int main() { int iaData[5] = {3,5,123,6,1}; int ArraySize = SIZE_ARRAY(iaData); FindTwoLargestNumber(iaData,ArraySize); return 0; } |

**OutPut:**