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