1

これは、選択ソート プログラム用のコードです。追加のメソッドやクラスを使用せずにコードを改善する方法があるかどうかを知りたいです。

public class Selection_Sort {


public static void main(String[] args) {
int arr[]={234,151,123,4,5342,76,48};
int min=0; int temp;
for(int i=0;i<=arr.length-1;i++){
    min=i;
    for (int k=i+1;k<arr.length;k++){
        if(arr[k]<arr[i]){
            temp=arr[i];
            arr[i]=arr[k];
            arr[k]=temp;
        }
    }
}
for (int j=0;j<=arr.length-1;j++)
    System.out.println(arr[j]+" ");

}

}
4

8 に答える 8

3
public static void main(String[] args) {
    int arr[]={234,151,123,4,5342,76,48};
    int arrLength = arr.length;
    for(int i=0;i<arrLength-1;i++){
        int min=i;
        for (int k=i+1;k<arrLength;k++){
            if(arr[k]<arr[min]){
                min = k;
            }
        }
        if (i != min) {
            int temp=arr[i];
            arr[i]=arr[min];
            arr[min]=temp;
        }
    }
    for (int j=0;j<arrLength;j++) {
        System.out.println(arr[j]+" ");
    }
}
于 2013-09-24T07:31:19.980 に答える
0

これを使って

class Selection {
    public static void main(String[] args) {
        int arr[]={234,151,123,4,5342,76,48}; /* arr[0] to arr[n-1] is the array to sort */
        int lowest, i, j;
        for(i = 0 ; i < arr.length-1; i++) {  /* advance the position through the entire array */
            lowest = i;                       /* assume the min is the first element */
            for(j = i+1 ; j < arr.length; j++) { /* if this element is less, then it is the new minimum */ 
                if(arr[j] < arr[lowest]) {
                    lowest = j;                  /* found new minimum; remember its index */
                }
            }
            if(lowest != i) {                   /* lowest is the index of the minimum element. Swap it with the current position */
                int temp = arr[i];
                arr[i] = arr[lowest];
                arr[lowest] = temp;
            }
        }
        for (int k = 0; k <= arr.length-1 ; k++) {
        System.out.println(arr[k] + " ");
        }
    }
}

これは、あなたが尋ねた選択ソートアルゴリズムです。

于 2013-09-24T08:00:19.453 に答える
0

元の選択ソートの実装は次のとおりです。スワップ操作を実行するために min を使用しないという問題の実装。

public static void sort(int[] arr) {
        int min=-1;

        for (int i = 0; i < arr.length; i++) {
            min = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
}
于 2014-03-16T19:57:02.043 に答える
0

非常に遅いバブルソートアルゴリズムを使用しているようです。コードを改善したい場合は、ripplesort や quicksort などのアルゴリズムを使用することをお勧めします。

于 2013-09-24T07:09:02.583 に答える
0

わずかな改善は次のようになります。

int arrayLength = arr.length;  
// Then use it in conditional statement of for loop.

Arrayループのたびにlength プロパティを呼び出さないようにします。ループ数が少ない場合はそれほど影響はありませんが、ループ数が多い場合やループの反復回数が多い場合は、時間を短縮するのに役立ちます。

于 2013-09-24T07:09:08.647 に答える
0
  1. ローカル変数 min の値は使用されません
  2. k <= arr.length-1

-->

k < arr.length
于 2013-09-24T07:20:09.147 に答える
-1
public class JavaApplication55 {

    public static void main(String[] args) {

        int[] array ={234,435,567,768,123,456,789,789,5670,6789};
     for(int j =0;j< array.length;j++){  
        for(int i =j+1;i < array.length;i++ ){
        int temp;

            if(array[j]>array[i]){

            temp =array[j];
            array[j] =array[i];

            array[i] =temp;

            }

            else{}


        }}





        for(int k =0;k< array.length;k++){

            System.out.println(array[k]);

        }

    }
enter code here

}
于 2014-04-30T11:55:03.257 に答える