Java 作业:排序算法

Java 作业:排序算法,java,algorithm,sorting,numbers,Java,Algorithm,Sorting,Numbers,我应该创建一个根据以下步骤排序的算法: 方法1 选择列表中的最低数字,并与第一个数字交换 选择列表中最低的数字,并与第二个数字交换。 从第二个号码开始检查 选择列表中最低的数字,并与第三个数字交换。 从第三个号码开始检查 选择列表中最低的数字,并与第四个数字交换。 从第四个号码开始检查 重复…直到你到达最后一个号码 目前,这是我提出的代码: public static void method1() { int low = 999; int index = 0;

我应该创建一个根据以下步骤排序的算法:

方法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] +", ");
    }
}
为什么我在输出中只得到8的值?因为这是家庭作业,请不要告诉我答案。我只想得到指导,谢谢

编辑: 代码现在如下所示:

run:
8, 8, 8, 8, 8, 8, 8, 8, 
BUILD SUCCESSFUL (total time: 0 seconds)
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("");

这个家庭作业的日期已经过去了,但我想我会添加一些循序渐进的方法

我处理这个问题的方法是把它分解成几个小步骤。每个步骤都应该是一个方法或函数


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;
}
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);
        }
    }
}

3.但是如果我们想将
findLowestStartingAtNth()
的输出输入到
swapNumbers()
的输入中,那么我们需要返回索引而不是数字本身。 因此,方法从步骤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;
}

5.我们有一个模式。从1号开始检查,与1号交换。从2号开始检查,与2号交换。开始用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);
    }
}

你一个问题也没问。你试过调试它吗?对不起,我在帖子里加的。我已经这样做了:`for(inti=0;Inum[j]){low=num[j];index=j;}}他想自己解决这个问题。老实说,这是我在这里看到的最好的家庭作业类问题之一@OP:您没有使用
safe
,并且在
num[i]=num[index]中设置了不正确的值行。注意这一点。仔细查看
索引
何时设置和更新。@在第二个循环中,您将检查
num
,并将每个索引的值设置为
num[index]
,这是您在第一个循环中确定的“最低”值。
int numbers = new int[] {33, 22, 8, 59, 14, 47, 60, 27};
int found = findLowestStartingAtNth( 0 );
swapNumbers(0, found);
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);
    }
}
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);
        }
    }
}