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

这是原始的选择排序实现。有问题的实现不使用 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
  1. 未使用局部变量 min 的值
  2. k <= arr.length-1

-->

k < arr.length
于 2013-09-24T07:20:09.147 回答
0

看起来您正在使用非常慢的冒泡排序算法。如果你想改进你的代码,我会推荐使用像ripplesort或quicksort这样的算法。

于 2013-09-24T07:09:02.583 回答
0

轻微的改进应该是这样的:

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

这样它就不会Array在循环中调用每次的长度属性。对于少量循环,它不会产生太大影响,但它有助于减少循环更多或循环迭代次数更多的时间。

于 2013-09-24T07:09:08.647 回答
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

如果没有在选择排序上编写 java 程序的方法可能会很麻烦。好吧,这是即兴代码。

public class JavaSelectionSort 
{
   public static int[] selectionSort(int[] arr)
   { 
      // selection sort array java
      for(int a = 0; a < arr.length - 1; a++)
      {
         int index = a;
         for(int b = a + 1; b < arr.length; b++)
            if(arr[b] < arr[index]) 
               index = b;
 
         int smallNumber = arr[index]; 
         arr[index] = arr[a];
         arr[a] = smallNumber;
      }
      return arr;
   }
 
   public static void main(String[] args) 
   {
      int[] arrOne = {10, 23, 32, 14, 27, 45, 36, 21};
      int[] arrTwo = selectionSort(arrOne);
      for(int x: arrTwo)
      {
         System.out.print(x);
         System.out.print(", ");
      }
   }
}

有关选择排序的更多信息,请参阅资源。

于 2018-03-12T11:50:50.657 回答
-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 回答