C Online Compiler
Example: Find Second Smallest and Largest in Single Pass in C
C
C++
C#
Java
Python
PHP
main.c
STDIN
Run
// Find Second Smallest and Largest in Single Pass #include <stdio.h> #include <limits.h> // For INT_MAX and INT_MIN void findSecondMinMaxSinglePass(int arr[], int n) { if (n < 2) { printf("Array must have at least two elements.\n"); return; } // Initialize with extreme values int smallest = INT_MAX, secondSmallest = INT_MAX; int largest = INT_MIN, secondLargest = INT_MIN; for (int i = 0; i < n; i++) { // Logic for smallest and second smallest if (arr[i] < smallest) { secondSmallest = smallest; // Current smallest becomes second smallest smallest = arr[i]; // Current element becomes new smallest } else if (arr[i] < secondSmallest && arr[i] != smallest) { secondSmallest = arr[i]; // Current element is between smallest and secondSmallest } // Logic for largest and second largest if (arr[i] > largest) { secondLargest = largest; // Current largest becomes second largest largest = arr[i]; // Current element becomes new largest } else if (arr[i] > secondLargest && arr[i] != largest) { secondLargest = arr[i]; // Current element is between largest and secondLargest } } if (secondSmallest != INT_MAX) { printf("Second smallest element (single-pass approach): %d\n", secondSmallest); } else { printf("Second smallest element not found (all elements might be same or array too small).\n"); } if (secondLargest != INT_MIN) { printf("Second largest element (single-pass approach): %d\n", secondLargest); } else { printf("Second largest element not found (all elements might be same or array too small).\n"); } } int main() { int arr[] = {12, 35, 1, 10, 34, 1}; int n = sizeof(arr) / sizeof(arr[0]); printf("Original array: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); findSecondMinMaxSinglePass(arr, n); int arr2[] = {5, 5, 5, 5}; int n2 = sizeof(arr2) / sizeof(arr2[0]); printf("\nOriginal array 2: "); for (int i = 0; i < n2; i++) { printf("%d ", arr2[i]); } printf("\n"); findSecondMinMaxSinglePass(arr2, n2); int arr4[] = {10, 20, 30}; int n4 = sizeof(arr4) / sizeof(arr4[0]); printf("\nOriginal array 4: "); for (int i = 0; i < n4; i++) { printf("%d ", arr4[i]); } printf("\n"); findSecondMinMaxSinglePass(arr4, n4); int arr3[] = {7}; int n3 = sizeof(arr3) / sizeof(arr3[0]); printf("\nOriginal array 3: "); for (int i = 0; i < n3; i++) { printf("%d ", arr3[i]); } printf("\n"); findSecondMinMaxSinglePass(arr3, n3); return 0; }
Output
Clear
ADVERTISEMENTS