`
128kj
  • 浏览: 585013 次
  • 来自: ...
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
并查集 java
class DisjointSet {   
  
    protected int n;   
    protected int[] parent;   
    protected int[] rank;   
  
    public DisjointSet(int n) {   
        this.n = n;   
        init(n);   
    }   
  
    protected void init(int n) {   
        this.parent = new int[this.n + 1];   
        this.rank = new int[this.n + 1];   
        for (int i = 1; i <= n; i++) {   
            parent[i] = i;   
            rank[i] = 1;   
        }   
    }   
  
    protected int find(int x) {  
        if (parent[x] != x) {   
            parent[x] = find(parent[x]);   
        }   
        return parent[x];   
    }   
  
    protected void union(int ra, int rb) {   
        if (rank[ra] > rank[rb]) {   
            parent[rb] = ra;   
        } else if (rank[ra] < rank[rb]) {   
            parent[ra] = rb;   
        } else {   
            rank[rb]++;   
            parent[ra] = rb;   
        }   
    }   
}  
求素数 java
 public class Test{
     final int n=100;

  public void method1(){ 
 
  int a[]=new int[n];
  for(int i=0;i<n;i++) 
    a[i]=1+i;    //首先将数字1到100存入数组内
    a[0]=0;     //因1不是素数,首先就把它给注释掉
  for(int i=0;i<n;i++) {       //筛选开始
   if(a[i]==0)    continue;   //如果已经被标注,则继续找,直到没被标注的数为止
   for(int j=i+1;j<n;j++)       //对a[i]的所有倍数进行标注
       if(a[j]%a[i]==0) a[j]=0;
  }

  for(int i=0;i<n;i++)
   if(a[i]>0)
    System.out.print(a[i]+"  ");
  }
 
  public void method2(){
    boolean[] prime=new boolean[n+1];
    prime[1]=false;
    prime[2]=true; 
    for(int i=3; i<n; i+=2)
      prime[i] = true; //每间隔2就赋1

    for(int i=2; i<n/2; i++){
      if(prime[i])
        for(int j=2; j<n/i; j++)
                prime[i + i * j] = false;  //经典之处
    }

   //在prime数组中值为true对应的角标就是素数

    for(int i=1;i<n;i++)
       if(prime[i]) System.out.print(i+"  ");
  }

   public static void main(String[] args){
      new Test().method1();
      System.out.println();
      new Test().method2();
   }
}

运行:
C:\java>java  Test
2  3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73
79  83  89  97
2  3  5  7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73
79  83  89  97
java计算程序的运行时间 java
第一种是以毫秒为单位计算的。

  Java代码
  long start=System.currentTimeMillis();   //获取开始时间
  doSomeThing();  //测试的代码段
  long end=System.currentTimeMillis(); //获取结束时间
  System.out.println("程序运行时间: "+(end-start)+"ms");

  

第二种是以纳秒为单位计算的。

  Java代码
  long start=System.nanoTime();   //获取开始时间
  doSomeThing();  //测试的代码段
  long end=System.nanoTime(); //获取结束时间
  System.out.println("程序运行时间: "+(end-start)+"ns");
Global site tag (gtag.js) - Google Analytics