5

コードはこれを行う必要があります:a)ソートされていない整数の配列が与えられた場合、タスクは次のアルゴリズムを適用して配列をソートすることです(入力に重複が含まれていないと仮定します):配列の最初の要素から開始して次の手順を実行します:–小さい要素の数を数えて、正しい位置を見つけますi。–エレメントが正しい位置にある場合は、後続のエレメントに移動します。–それ以外の場合は、現在のエレメントを位置iにあるエレメントと交換します。–最後の要素に到達するまで、前の手順を繰り返します。

例:5 7 3 6 9チェックa[0]、それよりも小さい要素が1つあるため、位置1の要素と交換する必要があります。7 5 369新しい要素a[0]を確認します。位置3に移動するはずです。65379新しい要素a[0]を確認します。位置2に移動するはずです。35679新しい要素a[0]を確認します。正しい位置にあるので、次の要素a[1]に移動します。

public class  Assignment1_T11_25_2729_Sara_Aly {
private int[] a;
private int max;
private int n;
int position=0;
public  Assignment1_T11_25_2729_Sara_Aly (int max){
    a= new int[max];
}
public void insert(int x){
    a[n]=x;
    n++;
        }
public void sort(){
    int out=0, smaller=0;
    while(out<n){
        for(int in=out+1;in<n;n++){
            if(a[in]<a[out])
                smaller++;
        }
        if (smaller==0){
            out++;
        }
        else {
            swap(a[out], a[smaller]);
        }
    }
    }
private void swap (int one, int two){
    int temp=a[one];
    a[one]=a[two];
    a[two]=temp;
}
    public void display(){
        for (int i=0;i<n;i++){
            System.out.print(a[i]+ " ");
        }
        System.out.println("");
    }
public static void main(String[]args){
    int maxsize=5;
    Assignment1_T11_25_2729_Sara_Aly trial;
    trial= new  Assignment1_T11_25_2729_Sara_Aly(maxsize);
    trial.insert(5);
    trial.insert(7);
    trial.insert(3);
    trial.insert(6);
    trial.insert(9);
    trial.display();
    trial.sort();
    trial.display();
}
}

    Tried a few algorithims to get it to work but for some reason it won't sort any suggestions??

これもソート方法を試しましたが、うまくいきませんでした。

public void sort(){
boolean finished = false;
int position =0;
    while (position<max){
        if (finished==true){
        position++;
        finished =false;
        }
        else {
            int smaller=0;
            for (int j = position+1; j<max; j++){
            int temp=a[position];
                if (a[j] <a[position]){
                    smaller++;
                }
            }
            if (smaller==0){
                finished= true;
            }
            else {
                int temp= a[smaller];
                a[smaller]=a[position];
                a[position]=temp;
                }
                }
            }
        }
4

1 に答える 1

2

あなたは問題が何であるかを正確に説明していませんが、あなたの中で、あなたのメソッドのループのfirst code内側for-loopがあなたに問題を与えていると思います:-whilesort

    for(int in = out+1; in < n; n++) {
        if(a[in] < a[out])
            smaller++;
    }

n++ここでは、ではなくインクリメントしていますin++。それを確認してください。に変更しin++ます。そのため、無限ループに陥っている可能性があります。

また、メソッドに問題がありますswapswap実際の配列要素を使用してメソッドを呼び出しましたが、メソッドと同様indicesにそれらを検討しています。

swap(a[out], a[smaller]);  // Called with element `a[out]`

private void swap (int one, int two) {

    int temp=a[one];    // This is equivalent to a[a[out]]
    a[one]=a[two];
    a[two]=temp;
}

メソッドにインデックスを渡すことができます:-

したがって、次のようにスワップメソッドを呼び出します:-swap(out, smaller);

更新:-メソッドのwhileループで、最初のステートメントとしてsort追加します。smaller = 0;0に再初期化します。

于 2012-10-13T10:40:14.437 に答える