w3resource

C Exercises: Rearrange an array in such an order that– smallest, largest, 2nd smallest, 2nd largest and on

C Array: Exercise-102 with Solution

Write a program in C to rearrange an array in such an order that– small, large, second smallest, second largest, etc.

Expected Output:
The given array is:
5 8 1 4 2 9 3 7 6
The new array is:
1 9 2 8 3 7 4 6 5

The task is to write a C program that rearranges an array such that the elements are ordered in the following pattern: smallest, largest, second smallest, second largest, and so on. The program should first sort the array, then rearrange the elements to follow this specific order, and finally display the rearranged array.

Sample Solution:

C Code:

#include<stdio.h>

// Function to sort the array in ascending order using bubble sort
void sort(int arr1[], int n) 
{ 
    int i, j, temp; 
    for (i = 0; i < n - 1; i++) {   
        for (j = 0; j < n - i - 1; j++) {
            if (arr1[j] > arr1[j + 1]) {
                temp = arr1[j]; 
                arr1[j] = arr1[j + 1]; 
                arr1[j + 1] = temp;
            }
        }
    }   
    return;
} 

// Function to rearrange the array elements in zig-zag fashion
void rearrangeArray(int arr1[], int n) 
{   
    sort(arr1, n); // Sort the array

    int tempArr[n]; // Temporary array to store rearranged elements
    int ArrIndex = 0; // Index to insert elements in the temp array

    // Rearrange elements in zig-zag order
    for (int i = 0, j = n - 1; i <= n / 2 || j > n / 2; i++, j--) { 
        tempArr[ArrIndex] = arr1[i]; // Insert element from the start
        ArrIndex++;
        tempArr[ArrIndex] = arr1[j]; // Insert element from the end
        ArrIndex++;
    } 

    // Copy elements from the temp array back to the original array
    for (int i = 0; i < n; i++) { 
        arr1[i] = tempArr[i];
    }
} 

int main() 
{ 
    int arr1[] = { 5, 8, 1, 4, 2, 9, 3, 7, 6 };    
    int n = sizeof(arr1) / sizeof(arr1[0]); 
    int i = 0; 

    // Print the original array
    printf("The given array is:  \n");
    for(i = 0; i < n; i++) {
        printf("%d  ", arr1[i]);
    }
    printf("\n");

    // Rearrange the array and print the new array
    printf("The new array is:  \n");
    rearrangeArray(arr1, n); 
    for (int i = 0; i < n; i++) {
        printf("%d ", arr1[i]); 
    }
    return 0; 
}

Output:

The given array is:  
5  8  1  4  2  9  3  7  6  
The new array is:  
1 9 2 8 3 7 4 6 5  

Visual Presentation:

C Exercises: Rearrange an array in such an order that– smallest, largest, 2nd smallest, 2nd largest and on

Flowchart:

Flowchart:  Rearrange an array in such an order that– smallest, largest, 2nd smallest, 2nd largest and on

C Programming Code Editor:

Previous: Write a program in C to rearrange an array such that arr[i]=i.
Next: Write a program in C to update every array element with multiplication of previous and next numbers in array.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.