Saturday 24 October 2015

Find the smallest and second smallest element in an array

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