0

並べ替えメソッドがあり、メソッドが行う移動をカウントしたいのですが、カウントする必要がある変数は何もカウントしません。読み取ると0になります。

//En variabel för att man ska lagra info i den 
    //Tillfällig lagring. 
    int temp;
    int forflyttningarBubble = 0;
    int jamForElse = 0;

    //Loopar, loopen är inte mer än storleken på arrayen
    for(int i=0;i<allatal.length-1;i++ )
    {
       //En till loop
       for(int j=i+1;j<allatal.length;j++)
        { 
           //Om talet peckaren pekar på större än det andra
           //talet så ska programmet
           jamForElse++;
           if (allatal[i] > allatal[j])
           {
               forflyttningarBubble++;
               forflyttningarBubble++;
               forflyttningarBubble++;
               //Lagrar värdet array "i" i temp 
               temp = allatal[i];
               //Överför "j" till "i"
               allatal[i] = allatal[j];
               //temp värdet överförs till "i"
               allatal[j] = temp;
               forflyttningarBubble++;
            }
         }
    }
    statistik BubbleData = new statistik(jamForElse, forflyttningarBubble, allatal);
    return BubbleData;'

ここに私が使用するオブジェクトがあります

public class statistik {
    public int jamForElse;
    public int byten;
    public int[] allatal;

    public statistik(int jamForElse, int byten, int[] allatal) {
        this.byten = byten;
        this.allatal = allatal;
        this.jamForElse = jamForElse;
    }
}

値をファイルに書き込もうとすると、「0」が返されます

//Starttid
        long startTime = System.nanoTime();
        //Anropar metoden
        statistik bubble = bubbleSort(allatal);         
        //sluttiden
        long endTime = System.nanoTime();
        //för att få ett svar på tiden
        long duration = endTime - startTime;
        double seconds1 = (double)duration / 1000000000.0;

        //Gör en loop som är lika lång som arrayen
        for(int k=0;k<bubble.allatal.length-1;k++){
            //Lagrar informationen i filen 
            out.println(bubble.allatal[k]);
        }
        //Lagrar tiden också i filen
        out.println("BubbleSort (Nano): " + duration);
        out.println("Antal Sekunder: " + seconds1);
        out.println("Förflyttningar: " + bubble.byten);
        out.println("Jämförelser: " + bubble.jamForElse + "\n\n");
        System.out.print(bubble.byten); // i get "0"
4

1 に答える 1

0

答えはコード内にあります

 bubbleSort(allatal);

それには多くの欠陥があります。基本的にギリギリのケースの取り扱いは少ないです。要素がゼロの配列は、内側のループに入ることがなく、bytenフィールドを更新することもありません。要素が 1 つの配列でも同じことが起こります。

入力を検証して、並べ替えるのに十分な要素があることを確認しましたか? 小さな入力 (サイズが 0 または 1 の配列) は、「既にソートされている」ものとしてこれを通過します。ただし、実際の操作は必要ありません。

于 2013-04-18T14:52:47.767 に答える