I have written a code which gives all permutations of a string. I have 
assumed that all the characters in a given string are distinct. 
The main idea is as follows
-if suppose "abc" is given first 
 my base case is to form permutations of two characters
so I will have "ab" and "ba"
Now, I will just switch places of c - like "cab","acb" and "abc" - from the 
string "ab" 
Similarly obtain "cba","bca" and "bac" from "ba".

I have implemented this logic using recursion. The implementation is given 
below

I would like to know is there is any other efficient ways to do this

#include<iostream>
#include<string>
#include<string.h>
#define SIZE 7

using namespace std;
string * permutations (char *array,string *stringarray,int len);
string * Join(string *stringarray,char append);
int factorial (int n);
int numpermutations;

main()
{
    char array[]="bcad";
    //Write a program to find the factorial of a number

    numpermutations = factorial(strlen(array));
    
     string *stringarray = new string[numpermutations];
     
     int i;
     for(i=0;i<numpermutations;i++)
      stringarray[i] = "\0";
     
      permutations(array,stringarray,strlen(array)-1);
      
      i=0;
      while(i!=numpermutations)
      {
          cout<<stringarray[i]<<endl;
        i++;
      }
}

int factorial (int n)
{
 int fact;
    if(n==2)
    return 2;
    else
    {
        fact = n*factorial(n-1);
        return fact;
    }    
}

string *permutations(char *array,string *stringarray, int len)
{
    string * tempstring;

    if(len == 1)
    {
        char temp[3];
        temp[0] = array[0];//Here I am doing the swapping 
        temp[1] = array[1];
        temp[2] = '\0';
        stringarray[0] = temp;
        temp[0] = array[1];
        temp[1] = array[0];
        temp[2] = '\0';
        stringarray[1] = temp;
        int i;


    }
    else
    {
        stringarray = 
Join(permutations(array,stringarray,len-1),array[len]);//using recursion
    }
    return stringarray;
}

string * Join(string *stringarray,char append)//This is to join string  and 
a character
{
   int str_len = stringarray[0].length();//Get the length of one of  the 
strings
    string tempstring[numpermutations];
    
    
    int i;
    for(i=0;i<numpermutations;i++)
    tempstring[i] = "\0";

    int j,temparrayindex=0;
    i=0;
/*    cout<<"First print wht is string  array"<<stringarray[0]<<endl;
    cout<<"stringarray[1]"<<stringarray[1]<<endl;*/


    while(stringarray[i]!="\0")
    {
        char *temp = new char[str_len+1];
        for(j=0;j<=str_len;j++)
        {
            int k;
            for(k=0;k<j;k++)
            temp[k] = stringarray[i][k];
            
            temp[k] = append;
            
            for(k=j+1;k<=str_len;k++)
            temp[k] = stringarray[i][k-1];
            temp[k]='\0';
          

            tempstring[temparrayindex]=temp;

            temparrayindex++;
            
            
            
        }
        delete []temp;
        i++;
    }
    
    i=0;
    while(i != numpermutations)
    {    
        stringarray[i] = tempstring[i];
        i++;
    }    
    
    
    return stringarray;
    
}

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/algogeeks/-/rSViVJl9Fu8J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to