w3resource

C Exercises: Sort an array of 0s, 1s and 2s

C Array: Exercise-54 with Solution

Write a program in C to sort an array of 0s, 1s and 2s.

Pictorial Presentation:

C Exercises: Sort an array of 0s, 1s and 2s

Sample Solution:

C Code:

#include <stdio.h>
void changePlace(int arr1[], int i, int j) 
{
    int tmp = arr1[i];
    arr1[i] = arr1[j];
    arr1[j] = tmp;
}
int sortElements(int arr1[], int end)
{
    int start = 0, mid = 0;
    int pivot = 1;
    while (mid <= end)
    {
        if (arr1[mid] < pivot) 
        {
            changePlace(arr1, start, mid);
            ++start, ++mid;
        }
        else if (arr1[mid] > pivot) 
        {
            changePlace(arr1, mid, end);
            --end;
        }
        else                        
        {
            ++mid;
        }
    }
}

int main()
{
    int arr1[] = { 0, 1, 2, 2, 1, 0, 0, 2, 0, 1, 1, 0 };
    int n = sizeof(arr1)/sizeof(arr1[0]);
	int i;
 //------------- print original array ------------------	
	printf("The given array is :  ");
	for(i = 0; i < n; i++)
	{
	printf("%d  ", arr1[i]);
    } 
	printf("\n");
//------------------------------------------------------ 	
	printf("After sortig the elements in the array are: \n");
    sortElements(arr1, n - 1);
    for (int i = 0 ; i < n; i++) 
	{
        printf("%d ", arr1[i]);
    }
    return 0;
}

Sample Output:

The given array is :  0  1  2  2  1  0  0  2  0  1  1  0  
After sortig the elements in the array are: 
0 0 0 0 0 1 1 1 1 2 2 2 

Flowchart:

Flowchart: Check whether an array is subset of another array.

C Programming Code Editor:

Improve this sample solution and post your code through Disqus.

Previous: Write a program in C to find majority element of an array.
Next: Write a program in C to check whether an array is subset of another 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.

C Programming: Tips of the Day

C Programming - What is the argument for printf that formats a long?

Put an l (lowercased letter L) directly before the specifier.

unsigned long n;
long m;

printf("%lu %ld", n, m);

Ref : https://bit.ly/3dIwfkP