关于计算排序的问题

时间:2010-05-30 15:49:50

标签: algorithm

您好我已经编写了以下代码,它按排序顺序打印元素只有一个大问题是它使用了两个额外的数组  这是我的代码

public  class occurance{
public static   final  int n=5;


public static void main(String[]args){
// n  is  maximum possible  value  what it should be in array suppose n=5 then array may be

int  a[]=new int[]{3,4,4,2,1,3,5};// as   u see all elements are less or equal to n
//create array a.length*n

int b[]=new int[a.length*n];
int c[]=new int[b.length];
 for (int i=0;i<b.length;i++){
  b[i]=0;
  c[i]=0;
}

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

   if (b[a[i]]==1){
  c[a[i]]=1;
}
 else{
 b[a[i]]=1;
}
}
 for (int i=0;i<b.length;i++){
   if (b[i]==1) {
   System.out.println(i);
}
  if (c[i]==1){
  System.out.println(i);
}
}





}
}
//
1
2
3
3
4
4
5   
1.i have two question what is complexity of this  algorithm?i  mean running time
2. how put this elements into other array  with sorted order? thanks

1 个答案:

答案 0 :(得分:0)

算法 - 如上所述 - 在O(n)中运行,其中n是数组a的大小。

但是,我甚至怀疑它是否正常工作。

所以,这是一个计数排序的伪代码实现。它需要一个整数数组a,并将排序后的值存储在整数数组b中。 ab的长度必须相同。

void countingSort(int[] a, int[] b){
 // first of all: count occurences
 int[] occ = new int[a.length];
 for (int i = 0; i<a.length; ++i){
  occ[i]=0;
 }
 for (int i = 0; i<a.length; ++i){
  occ[a[i]] = occ[a[i]] + 1;
 }
 // second: put the elements in order into b
 int s = 0;
 for (int i = 0; i<a.length; ++i){
  // how often did element i occur?
  for (int j = 0; j<occ[i]; ++j){
   b[s] = i;
   s = s + 1;
  }
 }
}

我希望我什么也没做错。