我应该创建一个根据这些步骤进行排序的算法:
方法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)
答案 0 :(得分:0)
这项家庭作业的日期已经过去,但我想我会逐步介绍一些方法。
我要解决的方法是将其分解为小步。每个步骤都应该是一个方法或函数。
因此,此方法为:
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;
}
这很简单:
private void swapNumbers( int i, int j ) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
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;
}
在列表中选择最低的数字,然后与第一个数字交换。
第一个数字是数组中的第零。
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);
}
}
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);
}
}
}