並べ替え学習(java)

9523 ワード

1.重複配列なし
2.重複配列あり
3、次の配列
package     ;





public class Main {

    static int count=0;

    //a        ,lev        ,len   

    public static  void swap(int a[],int lev,int i)

    {

        int temp=a[lev];

        a[lev]=a[i];

        a[i]=temp;

        

        

    }

    public static  void swap(char a[],int lev,int i)

    {

        char temp=a[lev];

        a[lev]=a[i];

        a[i]=temp;

        

        

    }



    

    public static void reverse(char c[],int low,int high)

    {

        int l=low;

        int h=high;

        while(l<h)

        {

            swap(c,l,high);

            l++;

            h--;

            

        }

        

        

        

    }

    //

    public static void  perm(int a[],int lev,int len)

    {

        if(lev==len)

        {

            for(int i=0;i<len;i++)

            {

                System.out.print(a[i]);

                

            }

            

            count++;

        }

        else

        {

            for(int i=lev;i<len;i++)

            {

                swap(a,lev,i);

                perm(a,lev+1,len);

                swap(a,lev,i);

                

            

                

                

                

                

            }

            

            

            

        }

        

        

        

        

    }

    //         

    

    public static void perm2(int a[],int lev)

    {

        if(lev==a.length)

        {

            for(int i=0;i<a.length;i++)

            {

                System.out.print(a[i]);

                

            }

            System.out.println();

            count++;

        }

        else

        {

            boolean tf=true;

            for(int j=lev;j<a.length;j++)

            {

                //           

                for(int k=lev;k<j;k++)

                {

                    if(a[k]==a[j])

                    {

                        tf=false;

                        break;

                    }

                }

                

                if(tf)

                {

                swap(a,lev,j);

                perm2(a, lev+1);

                swap(a,lev,j);

                }

                

                

                

            }

            

            

        }

        

        

        

    }



    

 //      STl

    public static boolean nextPerm(char c[]) //      

    {

    

        //     

        int i=c.length -2;

        while(i>=0&&c[i]>=c[i+1])

        {

            i--;

        }

        if(i<0) //        ,   

        {

            reverse(c,0,c.length-1);

            return false;

            

        }

        else

        {

        ////            c[i]   

        int j=c.length-1;

        while(c[j]<=c[i])

        {

            j--;

            

        }

        //     

        swap(c,i,j);

        

        reverse(c,i+1,c.length -1);

        return true;

        

        }

        

        

        

        

        

        

        

        

        

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int a[]={1,1,1,1,1};

        perm2(a,0);

        System.out.println(count);

        char c[]="1234".toCharArray();

        int count=1;

    /*    while(nextPerm(c))

        {

            

            System.out.println(c);

            count++;

        }

        System.out.println(count);*/



    }

        



}