2012-04-02 8 views
1

私のコンピュータサイエンスの教師は、私たちにハンドトレースのためのさまざまなソートアルゴリズムを割り当てました。これを正しくトレースしていますか?

void selection sort 
{ 
    for(int i = 0; i < ray.length-1;i++) 
    { 
    int min = i 
    for(int j = i +1; j<ray.length;j++;) 
    { 
     if(ray[j] < ray[min]) 
     min = j; 
    } 
    if(min != i) 
    { 
     int temp = ray[min] 
     ray[min] = ray[i] 
     ray[i] = temp; 
    } 
    } 
} 

元の配列=ソートの{4,2,6,3,5,1} 順::私は私のトレースが 選択ソート正しかったことを確認したかった

1st pass - 2,4,6,3,5,1 
2nd pass - 2,3,6,4,5,1 
3rd pass - 2,3,4,6,5,1 
4th pass - 2,3,4,5,6,1 
5th pass - 2,3,4,5,1,6 
6th pass - 2,3,4,1,5,6 
7th pass - 2,3,1,4,5,6 
8th pass - 2,1,3,4,5,6 
9th pass - 1,2,3,4,5,6 
+1

あなたの質問がより多くの博覧会を得られるように、acまたはC++タグを(javaではないと思われる)確かに。 –

+1

パスのそれぞれを行っているとき、あなたはコードのどこにいますか? – twain249

+0

あなたはプログラムを実行して、各パスを渡す前に配列を印刷して、自分で確認することができます。 –

答えて

0

あなたのトレースが正しく表示されません

ときにあなたは配列を持って始めてください

{4,2,6,3,5,1} 
あなたは残りのためにこれを継続することができるはず

{1,2,6,3,5,4} 

この時点で、この

if(ray[j] < ray[min]) //2 < 4 TRUE (j = 1 min = 0) 
    min = j; 
//loop increment j 
if(ray[j] < ray[min]) //6 < 2 FALSE (j = 2 min = 1) 
//loop increment j 
if(ray[j] < ray[min]) //3 < 2 FALSE (j = 3 min = 1) 
//loop increment j 
if(ray[j] < ray[min]) //5 < 2 FALSE (j = 4 min = 1) 
//loop increment j 
if(ray[j] < ray[min]) // 1 < 2 TRUE (j = 5 min = 1) 
    min = j; 
//loop increment j (j = 6 end loop) 

if(min != i) //min = 5 i = 0 TRUE 
    temp = ray[min] //temp = 1 
    ray[min] ray[i] //ray[5] = ray[0] ray[5] = 4 
    ray[i] = temp //ray[0] = 1 

//loop increment i to 1 continue through this 

アレイを行う内部ループの間に外側のループ

min = i // i = 0 min = 0 

中、0

外側のループ

関連する問題