Home
Aptitude
Categories


Home » C programs » C One Dimensional Array programs

C program to find second smallest element in a one dimensional array



Here, we are implementing a C program that will read a one dimensional array of integers and find the second smallest element it.
Submitted by Radib Kar, on December 05, 2018

Problem statement: Write a C program to find the second smallest element in a one dimensional array.

Example: Type1: (all the elements are not same & no of element is more than two)

    Input:
    Array size: 4
    Elements: 32 54 -6 -15

    Output: 
    -6

Example: Type2: (second minimum doesn’t exist as size of array < 2)

    Input:
    Array size : 1
    Elements: 4

    Output: 
    no second minimum

Example: Type3: (all elements are same, thus only one minimum element)

    Input:
    Array size : 4
    Elements: 3 3 3 3

    Output: 
    no second minimum

Algorithm:

  1. Define two variable min & sec_min
  2. Initialize min to array[0] & sec_min to INT_MAX
  3. Scan the entire array
  4. a. for(int i=0;i<n;i++)
        if array[i]<min
            then update min to array[i]&sec_min to previous min value
        else if array[i] is smaller than sec_min but greater than min
            then update sec_min to array value
            do nothing to min
    End for loop
    
  5. If still sec_min has the value INT_MAX
    Only one minimum value exists, print "No second minimum value exists"
    Else
    Print sec_min



C implementation to to find second smallest element in a one dimensional array

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int findSecondMin(int* a,int n){
	if( n<=1)
		return 0;
	
	int min=a[0]; //initialize max to first array element
	int sec_min=INT_MAX,temp=0; //initialize min to first array element

	for(int i=0;i<n;i++){ //scan the entire array
		//if a[i]< min then update min to array value 
		//& second min to previous min value 
		if(a[i]<min){
			sec_min=min;
			min=a[i];
		}
		//else if a[i] is smaller than second min but greater 
		//than min then update second min to array element value
		else if (a[i] < sec_min && a[i] > min) 
			sec_min=a[i];
	}
	//if sec_min is still at its initialized value then no second minimum exists at all
	if(sec_min==INT_MAX)
		return 0;
	//else return second maximum
	return sec_min;
}

int main(){
	int n,sec_min=0;

	printf("enter no of elements\n");
	scanf("%d",&n);

	//dynamic array created
	int *a=(int*)malloc(sizeof(int)*n);

	printf("enter the elements........\n");
	//taking input
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);

	//find second maximum value
	sec_min=findSecondMin(a,n);

	if(sec_min==0) //if no second minimum exists
		printf("no second minimum exists\n");
	else
		printf("The second minimum no is : %d\n",sec_min);

	return 0;
}

Output

First run:
enter no of elements
4
enter the elements........
32 54 -6 -15
The second minimum no is : -6

Second run:
enter no of elements
1
enter the elements........
4
no second minimum exists

Third run:
enter no of elements
4
enter the elements........
3
3
3
3                                                                                              
no second minimum exists  





Comments and Discussions

Ad: Are you a blogger? Join our Blogging forum.





Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing » Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© https://www.includehelp.com some rights reserved.