【转】JAVA实现排列组合算法

转载 2007年10月02日 15:18:00

在网上看到的,下保存先来,有时间再看~

 

public class testsort{
  String[] list;
  StringBuffer sb;
  
int len,start;
  testsort(String 
in){
    len 
= Integer.parseInt(in);
    list 
= new String[len];
    
for(int i=0;i       list[i] = String.valueOf(i+1);
    printList();
  }

  
void replaceStr(int c1,int c2){
    String temp 
= list[c1];
    list[c1] 
= list[c2];
    list[c2] 
= temp;
  }

  
void printList(){
    
if(start==len-1){
      sb 
= new StringBuffer();
      
for(int i=0;i         sb.append(list[i]);
      sb.append(
" ");
      System.
out.print(sb);
    }
else{
      
for(int i=start;i         replaceStr(start++,i);
        
        printList();
        replaceStr(i,
--start);
       
// System.out.println(--start);
       
// System.out.println(start);
      }

    }

  }

  
public static void main(String args[]){
    
new testsort(args[0]);
  }

}

 

//**************************

下面我收集的关于排列的一些算法。有些我也具体不懂。以前没有好好学数据结构。先收集起来。慢慢研究也希望有高人来咱讲讲。

1.n个数的全排列
#i nclude <stdio.h>
const int N = 5;
int a[N] = {1,2,3,4,5};
void swap(int &a,int &b)
{
  int t ;
  t = a;
  a = b;
  b = t;
}
void permutation(int m,int n)
{
  int i;
  if(m==n)
  {
     for(i = 0;i<=n;i++)
     {
       printf("%d ",a[i]);
     }
     printf("/n");
  }
  for(i = m;i<=n;i++)
  {
    swap(a[i],a[m]);
    permutation(m+1,n);
    swap(a[i],a[m]);
  }
}
int main()
{
  permutation(0,4);
}


2.n取r的排列
#i nclude <stdio.h>
const int N = 5;
int a[N] = {1,2,3,4,5};
int b[N];
int r = 3;
char used[N];
void perm(int pos)
{
  int i;
  if(pos==r)
  {
    for(i = 0;i<r;i++)
     {
       printf("%d ",b[i]);
     }
    printf("/n");
  }
  for(i = 0;i<N;i++)
  {
     if(!used[i])
     {
        b[pos] = a[i];
        used[i]++;
        perm(pos+1);
        used[i]--;
     }
    
  }      
}
int main()
{
  perm(0);
}
3.n取r的组合
#i nclude <stdio.h>
const int N = 9;
int a[N] = {1,2,3,4,5,6,7,8,9};
int b[N];
int r = 4;
char used[N];
int count;
void combine(int pos)
{
  int i;
  if(pos==r)
  {
     for(i = 0;i<r;i++)
     {
       printf("%d ",a[b[i]]);
     }
    printf("/n");
    count++;
    return;
  }
  //这里是关键,第i个位置上的数,只能是从排在第i位的数开始的N-r个中的一个,后面的数一定要比前面的大
  for(i = (pos>0?(b[pos-1]+1):pos);i<=pos+N-r;i++)  
  {
    if(!used[i])
    {
      b[pos] = i;
      used[i]++;
      combine(pos+1);
      used[i]--;
    }
  }
}
int main()
{
combine(0);
}

关键字: 排列组合算法 
引用地址: http://www.dlog.cn/html/trackback.do?id=9597&type=1 (复制地址)

 

相关文章推荐

java排列组合算法代码实现

java排列组合算法代码实现 源代码下载地址:http://www.zuidaima.com/share/1550463479024640.htm...

Java排列组合算法

  • 2016年07月31日 15:56
  • 95KB
  • 下载

java排列组合算法

一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用 二.用递归的思想来求排列跟组合,代码量比较大 三.利用动态规划的思想求排列和组合 下面是求...
  • mm_bit
  • mm_bit
  • 2015年07月13日 16:40
  • 1566

排列组合算法之一: 01转换法_java改变后的c++版

本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。  首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。  然后从左到右扫描数组元素...

c语言实现排列组合算法问题

排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去了...

祝福:新春新年大吉大利。问鼎天下,谁与争锋。非递归非交换非转数组非无序全排列组合算法,诚邀比、测、评。

生成函数: static string 金箍棒(string 字符串, int 量, int 插位, int 调位) { if (插位 == 调...

排列组合算法实现--基于JS

公司要做了个彩票的预测奖金业务,居然要用到高中的排列组合,好吧,这个时候不得不承认,高中没有白上啊..... 排列组合的思想大家都清楚(不清楚的请回高中自行面壁。)   C n n一下子理不清,于是我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转】JAVA实现排列组合算法
举报原因:
原因补充:

(最多只允许输入30个字)