並べ替え学習(java)
9523 ワード
1.重複配列なし
2.重複配列あり
3、次の配列
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);*/
}
}