Java中的选择排序算法

时间:2015-07-09 23:40:31

标签: java arrays sorting

我在排序数组时遇到了一些麻烦。我正在尝试按升序排序。

我的任务是从用户那里获取一系列整数并将它们存储到一个数组中,然后按升序将它们显示给用户。我很好地从用户那里获得输入,将其存储在数组中并显示回来。我能够运行我的代码并得到我想要的结果,但是就使用选择排序按升序获取数组中的整数而言,我遇到了很多困难。

数组的大小取决于用户输入的值,因此它设置为变量numValues而不是数字。

我使用我创建的排序方法出错。我收到语法错误,void是无效的类型。我想我错过了什么,我不知道如何解决这个问题。如果有人能指出我正确的方向。任何帮助将不胜感激。

    System.out.println("Here are the values you've entered" ); 

    for(int n=0; n<values.length; n++)
    {

        System.out.print(values[n] + ""); 
    }
    System.out.println("Here are the values you've entered, in ascending order");

    /*
     * Method to arrange values in ascending order
     */
    private static void sort(int[] values) {

        int scan;
        int index;
        int minIndex;
        int minValue;     // Variables to put values in ascending order

        for(scan=0; scan < (values.length-1); scan++)
        {
            minIndex = scan;
            minValue = values[scan];

            for(index = scan+1; index < values.length; index++)
            {
                if(values[index] < minValue)
                {
                    minValue = values[index];
                    minIndex = index;
                } // End if
            } //End for

            values[minIndex] = values[scan];
            values[scan] = minValue;

        } // End for loop

        /*
         * For loop to display values 
         */
        for(int n=0; n < values.length; n++ )
        {
            System.out.print(values[scan] + " ");
        } //End for

    } // End method sort

    keyboard.close();    // To close Scanner object    

} //End method main

3 个答案:

答案 0 :(得分:4)

你不能在main里面有另一种方法。从main中获取方法sort(int [] values),并在main中调用它。

你有另一个问题。在排序方法中:

System.out.print(values[scan] + " ");

扫描必须替换为 n

以下是完成的代码:

import java.util.*;

public class Project {

    public static void main(String[] args) {


        int numValues;         // The number of values user has
        int [] values;         // Array declaration for values


        Scanner keyboard = new Scanner(System.in);             // Scanner object to get input from user

        System.out.println("How many values do you have?");    // To get number of values for array
        numValues = keyboard.nextInt();


        /*
         * Array to hold number of values
         */
        values = new int [numValues];


            /*
             * Loop to gather integer values
             */
        for (int n=0; n < values.length; n++ )
        {

            System.out.print("Enter value " + (n+1) + ":" );
            values[n] = keyboard.nextInt();

        } //End for loop
        System.out.println("Here are the values you've entered" );

        for(int n=0; n<values.length; n++)
        {

            System.out.print(values[n] + " "); 
        }
        System.out.println("Here are the values you've entered, in ascending order");
        sort(values);
        keyboard.close();    // To close Scanner object
    }
            /*
             * Method to arrange values in ascending order
             */



    private static void sort(int[] values) {

        int scan;
        int index;
        int minIndex;
        int minValue;     // Variables to put values in ascending order

        for(scan=0; scan < (values.length-1); scan++)
        {
            minIndex = scan;
            minValue = values[scan];

            for(index = scan+1; index < values.length; index++)
            {
                if(values[index] < minValue)
                {
                    minValue = values[index];
                    minIndex = index;
                } // End if
            } //End for

            values[minIndex] = values[scan];
            values[scan] = minValue;

        } // End for loop

        /*
         * For loop to display values 
         */
        for(int n=0; n < values.length; n++ )
        {
            System.out.print(values[n] + " ");
        } //End for

    } // End method sort
} // End class Project

答案 1 :(得分:0)

由于某些原因,您的程序将无法执行或无法显示正确的结果。

  1. 您正在使用&#34;私有静态void排序(int []值)&#34;主方法中的方法并不可能,因为我们无法在另一种方法中定义方法。您必须在main方法之外创建单独的方法,或者也可以在main方法中使用排序功能。

  2. 另一个错误在于下面的代码。您正在使用扫描变量以升序显示结果。这应该是n。

        for(int n=0; n < values.length; n++ )
        {
            System.out.print(values[scan] + " ");
        }
    
  3. 你的逻辑是正确的。但它对于选择排序来说有点大。以下是做这件事的小方法。

    public class SelectionSort
    {
    public static void main(String[]args)
    {
        int [] values = {15,14,13,12,11};
        System.out.println("Here are the values you've entered" ); 
              for(int n=0; n<values.length; n++)
             {
                System.out.print(values[n] + ""); 
             }
            System.out.println("\nHere are the values you've entered, in ascending order");
            sort(values);
    }
    private static void sort(int[] values)
    {
    
     int index = 0;
     int index2 = 0;
     int temp = 0;
     for(index=0; index<values.length; index++)
     {
         for(index2 = index+1; index2< values.length; index2++)
         {
                if(values[index] > values[index2])
                {
                    temp = values[index];
                    values[index]= values[index2];
                    values[index2] = temp;
                }
         }
     }
    
        for(int n=0; n < values.length; n++ )
        {
            System.out.print(values[n] + " ");
        }
    }
    }
    

答案 2 :(得分:0)

int[] arrayToSort=new int[]{1,7,81,2,-2,9,9,6,-6};
//the outer loop will switch the number

for(int i=0;i<arrayToSort.length;i++){
    int indexSmal=i;
    //the inner loop will search for the biggest number
    for(int j=i+1;j<arrayToSort.length;j++){
        //search for biggest number index starting from i index
        if(arrayToSort[j]>arrayToSort[indexSmal]){
           indexSmal=j;
        }
    }//end loop

        //swap the number
        int smallNum=arrayToSort[indexSmal];
        arrayToSort[indexSmal]=arrayToSort[i];
        arrayToSort[i]=smallNum;

    }// end loop 
    for(int i=0;i<arrayToSort.length;i++){
        System.out.print(arrayToSort[i]+", ");
}