Question: Write an efficient C program to find smallest and second smallest element in an array.
Difficulty Level: Rookie
Algorithm:
1) Initialize both first and second smallest as INT_MAX first = second = INT_MAX 2) Loop through all the elements. a) If the current element is smaller than first, then update first and second. b) Else if the current element is smaller than second then update second
Implementation:
#include <stdio.h> #include <limits.h> /* For INT_MAX */ /* Function to print first smallest and second smallest elements */ void print2Smallest( int arr[], int arr_size) { int i, first, second; /* There should be atleast two elements */ if (arr_size < 2) { printf ( " Invalid Input " ); return ; } first = second = INT_MAX; for (i = 0; i < arr_size ; i ++) { /* If current element is smaller than first then update both first and second */ if (arr[i] < first) { second = first; first = arr[i]; } /* If arr[i] is in between first and second then update second */ else if (arr[i] < second && arr[i] != first) second = arr[i]; } if (second == INT_MAX) printf ( "There is no second smallest element\n" ); else printf ( "The smallest element is %d and second Smallest element is %d\n" , first, second); } /* Driver program to test above function */ int main() { int arr[] = {12, 13, 1, 10, 34, 1}; int n = sizeof (arr)/ sizeof (arr[0]); print2Smallest(arr, n); return 0; } |
Output:
The smallest element is 1 and second Smallest element is 10
The same approach can be used to find the largest and second largest elements in an array.
Time Complexity: O(n)
Please write comments if you find any bug in the above program/algorithm or other ways to solve the same problem.
No comments:
Post a Comment