2017-07-15 17 views
-4

私は、Javaの時分割類似アルゴリズムを開発して整数の並べ替えを実行しました。プログラムは以下の通りですが、アルゴリズムの複雑さを計算する方法はわかりません。誰でも最悪の場合の複雑さが何であるか教えていただけますか?時分割ソートアルゴリズムの時間複雑度はどのくらいですか?

import java.util.ArrayList; 


public class TimeSharingSort { 

public static void main(String[] args){ 
    int[] array = {10,9,8,7,6,5,4,3,2,1,0}; 
    int[] count = new int[array.length]; 
    int i,j=0; 
    ArrayList<Integer> a = new ArrayList<Integer>(array.length); 
    while(a.size()!=array.length){ 
     for(i=0;i<array.length-j;i++){ 
      if(count[i]<array[i]){ 
       count[i]++; 
       //System.out.println("count["+i+"]="+count[i]+"   array["+i+"]="+array[i]); 
      } 
      else if(count[i]==array[i]){ 
       a.add(array[i]); 
       j++; 
      } 
     } 
    } 
    for(i=0;i<a.size();i++){ 
     System.out.print(a.get(i)+" "); 
    } 
} 

} 

答えて

1

複雑さはO(n^2)です。 理由: - プログラムの中核部分がforループをしばらく使用しているため、O(n^2)になります。

+0

これは正しくありません。 whileループはnに大きく依存するのではなく、配列内の数値の合計に依存します。たとえば{10000,90000}のソートは{1、0}のソートより100000倍遅くなります。 – Henry

+0

はい、絶対に、私は同意します。私はまた学んでいる。しかし、あなたはそれにしたがって、その複雑さはどうなるのでしょうか? –

+1

's'が配列のすべての数字の合計である場合、努力は' O(s + n) 'です。 – Henry

関連する問題