void sort012(int a[],int n){
    int i = 0, s = 0, last = n-1;
     while(i<=last){
       if(a[i] == 0 && i!=s)
        {
       swap(a[i], a[s]);
       s++;
       }
else if(a[i] == 2 && i!=last)
{
       swap(a[i], a[last]);
       last--;
}
else
       i++;
}
}



On Sat, Sep 24, 2011 at 5:13 PM, Ankit Sinha <[email protected]> wrote:

> I think this will do the same: -
>
> #include "stdafx.h"
> #include "stdlib.h"
>
> void swap(int *a, int start, int end)
> {
>        int temp;
>        temp = *(a + start);
>        *(a + start) = *(a + end);
>        *(a + end) = temp;
> }
>
> int _tmain(int argc, _TCHAR* argv[])
> {
>        int minIndex=0, maxIndex=8;
>        int i=1;
>        int a[9] ={1,0,2,1,0,2,0,0,1};
>        while(i<maxIndex)
>        {
>                if(a[maxIndex] == 2)
>                        maxIndex--;
>                if(a[minIndex] == 0)
>                        minIndex++;
>                if(a[i] > a[maxIndex])
>                {
>                        swap(a, i, maxIndex);
>                        continue;
>                }
>                else  if (a[i] < a[minIndex])
>                {
>                        swap(a, i, minIndex);
>                        continue;
>                }
>                i++;
>        }
>        for (i =0 ; i< 9; i++)
>                printf("[%d]", a[i]);
>        system("PAUSE");
>        return 0;
> }
> Please comment.
>
> Cheers,
> Ankit Sinha
>
> On Sat, Sep 24, 2011 at 4:10 PM, malay chakrabarti <[email protected]>
> wrote:
> > dutch national flag problem :)
> >
> > On Sat, Sep 24, 2011 at 3:45 PM, Dheeraj Sharma
> > <[email protected]> wrote:
> >>
> >> i think this travels only once ... correct me if am wrong
> >> #include<stdio.h>
> >> #include<string.h>
> >> #define SWAP(a,b,c) (c)=(a),(a)=(b),(b)=(c)
> >> int main()
> >> {
> >>     int t,x;
> >>     scanf("%d",&t);
> >>     while(t--)
> >>     {
> >>               char str[100];
> >>               scanf("%s",str);
> >>               int i=0,j=0,k=strlen(str)-1;
> >>
> >>               while(str[i]=='0')
> >>               i++;
> >>               while(str[k]=='2')
> >>               k--;
> >>
> >>               j=i;
> >>               while(j<=k)
> >>               {
> >>                          if(str[j]=='2')
> >>                          {
> >>                          SWAP(str[j],str[k],x);
> >>                          k--;
> >>                          }
> >>
> >>                          if(str[j]=='0')
> >>                          {
> >>                                         SWAP(str[i],str[j],x);
> >>                                         i++;
> >>                                         }
> >>                           if(str[j]!='2')
> >>                           j++;
> >>                                         }
> >>
> >>               printf("%s\n",str);
> >>               }
> >>     return 0;
> >> }
> >>
> >>
> >> On Sat, Sep 24, 2011 at 11:39 AM, Yogesh Yadav <[email protected]>
> wrote:
> >>>
> >>> we cant traverse the string twice...
> >>>
> >>> if there is an error in my logic then plz tell....
> >>>
> >>> my logic is:
> >>> we have to take starting and ending indexes for '0','1','2' like below
> >>>
> >>>                                0          1         2
> >>> starting_index
> >>> ending_index
> >>>
> >>>
> >>> now suppose our string "102112011"
> >>>
> >>> so we start from the left and traverse the whole string
> >>>
> >>> first character ='1'
> >>>
> >>>                                0          1         2
> >>> starting_index                     0
> >>> ending_index                      0
> >>>
> >>> next character = '0'
> >>>
> >>>                                0          1         2
> >>> starting_index         1          0
> >>> ending_index          1          0
> >>>
> >>> ( ending_index0 > ending_index1 ) so we swap the numbers according to
> >>> Starting_index not according to Ending_index
> >>> So it will become
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1
> >>> ending_index          0          1
> >>>
> >>> and string will become "01"
> >>>
> >>> next character '2'
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         2
> >>> ending_index          0          1         2
> >>>
> >>> (ending_index0<ending_index1<ending_index2)    so ending indexes in
> >>> increasing order...so no need to swap
> >>>
> >>> so string is now "012"
> >>>
> >>> next character '1'
> >>>
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         2
> >>> ending_index          0          3         2
> >>>
> >>> (ending_index1>ending_index2) so we swap the current 1 with starting
> >>> index of 2
> >>> so string will become "0112"
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         3
> >>> ending_index          0          2         3
> >>>
> >>> next character '1'
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         3
> >>> ending_index          0          4         3
> >>>
> >>> (ending_index1>ending_index2) so we swap the current 1 with starting
> >>> index of 2
> >>>
> >>> so string will become "01112"
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         4
> >>> ending_index          0          3         4
> >>>
> >>> next character '2'
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         4
> >>> ending_index          0          3         5
> >>>
> >>> (ending_index0<ending_index1<ending_index2) so no swap
> >>>
> >>> so string will become "011122"
> >>>
> >>> next character '0'
> >>>
> >>>
> >>>                                0          1         2
> >>> starting_index         0          1         4
> >>> ending_index          6          3         5
> >>>
> >>>
> >>> (ending_index0>ending_index1>ending_index2) so we swap the current 0
> with
> >>> staring index of 2 first and then with starting index of 1
> >>> so string will become "0011122"
> >>>
> >>>                                0          1         2
> >>> starting_index         0          2         5
> >>> ending_index          1          4         6
> >>>
> >>>
> >>> and so on.... i hope its much explained...
> >>>
> >>>
> >>> ....
> >>>
> >>>
> >>> On Sat, Sep 24, 2011 at 10:30 AM, Dheeraj Sharma
> >>> <[email protected]> wrote:
> >>>>
> >>>> char str[100],t;
> >>>>               scanf("%s",str);
> >>>>               char ch='0';
> >>>>               int i=0,j=0;
> >>>>               while(j<strlen(str))
> >>>>               {
> >>>>                                   if(str[j]==ch)
> >>>>                                   {
> >>>>                                   SWAP(str[i],str[j],t);
> >>>>                                   i++;
> >>>>                                   }
> >>>>                                   j++;
> >>>>                                   }
> >>>>               ch='1';
> >>>>               j=i;
> >>>>               while(j<strlen(str))
> >>>>               {
> >>>>                                   if(str[j]==ch)
> >>>>                                   {
> >>>>                                   SWAP(str[i],str[j],t);
> >>>>                                   i++;
> >>>>                                   }
> >>>>                                   j++;
> >>>>                                   }
> >>>>               printf("%s\n",str);
> >>>>
> >>>> On Sat, Sep 24, 2011 at 9:55 AM, Anup Ghatage <[email protected]>
> wrote:
> >>>>>
> >>>>> Is this like the segregating all the 1's to the right and the 0's to
> >>>>> the left
> >>>>> or am i missing something?
> >>>>>
> >>>>> On Sat, Sep 24, 2011 at 9:39 AM, VIHARRI <[email protected]>
> wrote:
> >>>>>>
> >>>>>> You are given a string (consisting of 0's, 1's or 2's) where 0
> >>>>>> represents a blue ball, 1 a
> >>>>>> red ball, and 2 a black ball. Using only swap operations (counting
> >>>>>> sort not allowed)
> >>>>>> rearrange the string such that all blue balls are together on one
> >>>>>> side, followed by all red
> >>>>>> balls, and then all black balls. You can iterate through the string
> >>>>>> only once.
> >>>>>> Eg 102112011 should produce 001111122?
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> You received this message because you are subscribed to the Google
> >>>>>> Groups "Algorithm Geeks" group.
> >>>>>> 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.
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Anup Ghatage
> >>>>>
> >>>>> --
> >>>>> You received this message because you are subscribed to the Google
> >>>>> Groups "Algorithm Geeks" group.
> >>>>> 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.
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Dheeraj Sharma
> >>>> Comp Engg.
> >>>> NIT Kurukshetra
> >>>>
> >>>>
> >>>> --
> >>>> You received this message because you are subscribed to the Google
> >>>> Groups "Algorithm Geeks" group.
> >>>> 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.
> >>>
> >>> --
> >>> You received this message because you are subscribed to the Google
> Groups
> >>> "Algorithm Geeks" group.
> >>> 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.
> >>
> >>
> >>
> >> --
> >> Dheeraj Sharma
> >> Comp Engg.
> >> NIT Kurukshetra
> >>
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups
> >> "Algorithm Geeks" group.
> >> 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.
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > 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.
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> 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.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
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