家庭作业:排序算法

时间:2017-05-11 00:36:36

标签: java algorithm sorting numbers

我应该创建一个根据这些步骤进行排序的算法:

  

方法1

     

选择列表中的最小数字并与第一个数字交换。

     

选择列表中的最小数字并与第二个数字交换。   从第二个号码开始检查。

     

选择列表中的最小数字并与第三个数字交换。   从第三个号码开始检查。

     

选择列表中的最小数字并与第四个数字交换。   从第四个号码开始检查。

     

重复...直到你到达最后一个号码。

目前,这是我提出的代码:

public static void method1(){
    int low = 999;        
    int index = 0;
    int safe;
    int[] num = new int[]{33, 22, 8, 59, 14, 47, 60, 27};

    for(int i = 0; i < num.length; i++){
        if(low > num[i]){
            low = num[i];
            index = i;
        }
    }

    for (int i = 0; i < num.length; i++){
        safe = num[i];
        num[i] = num[index];
        low = 999;
        for(int j = (i+1); j < num.length; j++){
            if(low > num[j]){
                low = num[j];
            }
        }
    }

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

输出如下:

run:
8, 8, 8, 8, 8, 8, 8, 8, 
BUILD SUCCESSFUL (total time: 0 seconds)

为什么我只在输出中获得8的值?由于这是家庭作业,请不要告诉我答案。我只想指导,谢谢!

编辑:

代码现在看起来像这样:

int low = 999;        
        int index = 0;
        int safe;
        int[] num = new int[]{33, 22, 8, 59, 14, 47, 60, 27};

        for(int i = 0; i < num.length; i++){
            if(low > num[i]){
                low = num[i];
                index = i;
            }
        }

        for (int i = 0; i < num.length; i++){
            safe = num[i];
            num[i] = num[index];
            low = 999;
            for(int j = (i+1); j < num.length; j++){
                if(low > num[j]){
                    low = num[j];
                    index = j;
                }
            }
        }

        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] +", ");
        }
        System.out.println("");

这给了我一个输出:

run:
8, 8, 8, 14, 14, 27, 27, 27, 
BUILD SUCCESSFUL (total time: 0 seconds)

1 个答案:

答案 0 :(得分:0)

这项家庭作业的日期已经过去,但我想我会逐步介绍一些方法。

我要解决的方法是将其分解为小步。每个步骤都应该是一个方法或函数。


1。第一步是从N开始寻找数组中最小的数字。

因此,此方法为:

private int findLowestStartingAtNth( int n ) {
    int lowest = Integer.MAX_VALUE;
    for( int i = n ; i < numbers.length ; i++ ) {
        if( numbers[i] < lowest ) {
            lowest = numbers[i]; 
        }
    }
    return lowest;
}

2。然后我们需要在数组中交换两个任意数字。

这很简单:

private void swapNumbers( int i, int j ) {
    int temp = numbers[i];
    numbers[i] = numbers[j];
    numbers[j] = temp;
}

3。但是,如果我们希望将findLowestStartingAtNth()的输出输入到swapNumbers()的输入中,则需要返回 index 而不是数字本身。

因此将步骤1中的方法更改为:

private int findLowestStartingAtNth( int n ) {
    int lowest = Integer.MAX_VALUE;
    int index = n;
    for( int i = n ; i < numbers.length ; i++ ) {
        if( numbers[i] < lowest ) {
            lowest = numbers[i]; 
            index = i;
        }
    }
    return index;
}

4。让我们使用实现第一步所需的条件

在列表中选择最低的数字,然后与第一个数字交换。

第一个数字是数组中的第零。

int numbers = new int[] {33, 22, 8, 59, 14, 47, 60, 27};
int found = findLowestStartingAtNth( 0 );
swapNumbers(0, found);

5。我们有一个模式。从1st开始检查,与1st交换。从2nd开始检查,与2nd交换。开始用X检查,用X交换。

因此,我们将这种模式包装在另一种方法中:

private int[] numbers = new int[] {33, 22, 8, 59, 14, 47, 60, 27};
private void sort() {
    for( int i = 0 ; i < numbers.length ; i++ ) {
        int j = findLowestStartingAtNth( i );
        swapNumbers(i, j);
    }
}

6。最后,将其包装在一个类中,并从main()方法中触发它。看看代码是多么清晰,因为它被分为几个小步骤。

整个结果类为:

public class Method1 {

    public static void main(String[] args) {
        Method1 m = new Method1();
        m.numbers = new int[] {33, 22, 8, 59, 14, 47, 60, 27};
        m.sort();
        System.out.println(Arrays.toString(m.numbers));
    }

    private int[] numbers;

    private int findLowestStartingAtNth( int n ) {
        int lowest = Integer.MAX_VALUE;
        int index = n;
        for( int i = n ; i < numbers.length ; i++ ) {
            if( numbers[i] < lowest ) {
                lowest = numbers[i]; 
                index = i;
            }
        }
        return index;
    }

    private void swapNumbers( int i, int j ) {
        int temp = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = temp;
    }

    private void sort() {
        for( int i = 0 ; i < numbers.length ; i++ ) {
            int j = findLowestStartingAtNth( i );
            swapNumbers(i, j);
        }
    }
}