Given a string S, task is to print all permutations of a given string in lexicographically sorted order in C
Permutations of a given string in lexicographically sorted order in C
Here, in this page we will discuss the program to print all permutations of a given string in lexicographically sorted order in C Programming language. We are given with string and need to print them.
Example :
Input : ABCOutput :“ABC, ACB, BAC, BCA, CAB, CBA”
Algorithm :
- Sort the given string in non-decreasing order and print it.
- The first permutation is always the string sorted in non-decreasing order.
- Start generating next higher permutation.
- Repeat it until next higher permutation is not possible.
- If we reach a permutation where all characters are sorted in non-increasing order, then that permutation is the last permutation.
Code in C
Run
#include <stdio.h> #include <stdlib.h> #include <string.h> int compare (const void *a, const void * b) { return ( *(char *)a - *(char *)b ); } void swap (char* a, char* b) { char t = *a; *a = *b; *b = t; } int findCeil (char str[], char first, int l, int h) { int ceilIndex = l; for (int i = l+1; i <= h; i++) if (str[i] > first && str[i] < str[ceilIndex]) ceilIndex = i; return ceilIndex; } void sortedPermutations ( char str[] ) { int size = strlen(str); qsort( str, size, sizeof( str[0] ), compare ); int isFinished = 0; while ( ! isFinished ) { printf ("%s \n", str); int i; for ( i = size - 2; i >= 0; --i ) if (str[i] < str[i+1]) break; if ( i == -1 ) isFinished = 1; else{ int ceilIndex = findCeil( str, str[i], i + 1, size - 1 ); swap( &str[i], &str[ceilIndex] ); qsort( str + i + 1, size - i - 1, sizeof(str[0]), compare ); } } } int main() { char str[] = "ABC"; sortedPermutations( str ); return 0; }
Output :
ABC
ACB
BAC
BCA
CAB
CBA
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Login/Signup to comment
import java.util.*;
public class Main
{
public static void main(String[] args)
{
String a=”ABC”;
String b=””;
pa(a,b);
}
public static void pa(String a , String b)
{
if(a.length()==0)
{
System.out.print(b+” “);
return;
}
for(int i=0; i<a.length(); i++)
{
char c = a.charAt(i);
String r = a.substring(0,i)+a.substring(i+1);
pa(r,b+c);
}
}
}
Hey there,
Thanks for answering, Kindly join our Discord server for any technical related queries.