0

Eclipse は、私のパーティション機能に何か問題があると私に言い続けます。これは Java であり、配列のソートに関するすべてのクラスの一部です。

パーティションは次のように機能します。配列には i と j の 2 つのインデックスがあり、パーティション アルゴリズムの最初の部分では、i は配列の最初の要素を指し、j は最後の要素を指します。次に、アルゴリズムは、ピボット以上の値を持つ要素が見つかるまで i を前方に移動します。インデックス j は、ピボット以下の値を持つ要素が見つかるまで後方に移動します。i ≤ j の場合、それらは交換され、i は次の位置 (i + 1) に進み、j は前の位置 (j - 1) に進みます。i が j より大きくなると、アルゴリズムは停止します。

問題を見つけるのに苦労しているので、何が問題なのか分かりますか。助けていただければ幸いです。

public static int partition(int arr[], int left, int right)
    {
        int x = arr[right];

        int i = left-1;
        int temp=0;

        for (int j=left; j<right; j++)
        {
            if(arr[j]<=x)
            {
                i++;
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;

            }
        }

        temp = arr[i+1];
        arr[i+1] = arr[right];
        arr[right] = temp;
        return (i+1);

    }

編集

Eclipse は 2 つの問題があると言っています。1 つはパーティション関数の次のコード行です。

int x = arr[right];

そして、私のテストクラスの次の行で:

sort.partition(array, 100, array.length);

これがテストクラスです。これには、言及していない関数が含まれています。

import java.util.Random;


public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {

        int size = 1000;
        int max = 5000; 
        int[] array = new int[size];
        int loop = 0; 

        Random generator = new Random();
        //Write a loop that generates 1000 integers and 
        //store them in the array using generator.nextInt(max)

        generator.nextInt(max); //generating one

        //I need to generate 1000
        //So I need some kind of loop that will generate 1000 numbers. 

        for (int i =0; i<1000; i++)
        {
            generator.nextInt(max);
        }



        /**
         * After I do this, I'll have the array, array. 
         * Then comes what's under this. 
         * THat method is for measuring the time.
         * System.currentTimeMillis();, 
         * with this, I can collect a time for the start of the method
         * and one for the end. 
         * Time at the end, minus the time at the start
         * gets us the running time. 
         */



        long result;

        long startTime = System.currentTimeMillis();
        sort.quickSort(array,  100,  array.length-1);
        long endTime = System.currentTimeMillis();
        result = endTime-startTime; 

        System.out.println("The quick sort runtime is " + result + " miliseconds");

        long result2;

        long startTime2 = System.currentTimeMillis(); 
        sort.partition(array, 100, array.length);
        long endTime2 = System.currentTimeMillis();
        result2 =  endTime2 - startTime2;
        System.out.println("The partition runtime is "+result2 + " miliseconds");

        long result3;

        long startTime3 = System.currentTimeMillis();
        sort.bubbleSort(array, 100);
        long endTime3 = System.currentTimeMillis();
        result3 = endTime3-startTime3;
        System.out.println("The bubble sort runtime is "+result3 + " miliseconds");

        long result4;

        long startTime4 = System.currentTimeMillis();
        sort.selectionSort(array, 100); //change the second number to change
        //the size of an array. 
        long endTime4 = System.currentTimeMillis();
        result4 = endTime4-startTime4;
        System.out.println("The selection sort runtime is "+result4 + " miliseconds");



    }

}
4

1 に答える 1

0

まず、実際には乱数を配列に格納していないため、すべてゼロになります。

表示されている実際のエラーに関しては、古典的なエラーが 1 つ発生しています。2 つの選択肢があります:right配列の末尾を指すようにするか、配列の末尾を過ぎたところを指すようにします。どちらも有効ですが、2 つを混在させています。

具体的には、値として配列の末尾を 1 つ過ぎた 1000 を渡しますが、rightすぐにそれを使用して配列にインデックスを付け、自然に例外をスローします。

于 2013-04-25T02:31:05.787 に答える