我正在做mooc.fi,我的代码有效,但不会提交。
我得到的错误
方法swap与参数4,7,8,6无法正常工作index1 = 0 index2 = 3
结果是4,7,8,6但它应该是6,7,8,4
和
使用参数10,20,6,-1,13,11
,方法排序无法正常工作结果是10,20,6,-1,13,11,但它应该是-1,6,10,11,13,20
我知道错误是连接的,但我不太清楚该怎么做才能解决这个问题,任何帮助都表示赞赏!谢谢!
我的代码:
import java.util.Arrays;
public class Main {
public static int smallest(int[] array) {
int start = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] < start) {
start = array[i];
}
}
return start;
}
public static int indexOfTheSmallest(int[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i] == smallest(array)) {
return i;
}
}
return 0;
}
public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
int minIndex = index;
for (int i = index; i < array.length; i++) {
if (array[i] < array[minIndex]) {
minIndex = i;
}
}
return minIndex;
}
public static void swap(int[] array, int index1, int index2) {
int hold = 0;
for (int i = 0; i < array.length; i++) {
hold = array[index1];
array[index1] = array[index2];
array[index2] = hold;
}
}
public static void sort(int[] array) {
System.out.println(Arrays.toString(array));
for (int i = 0; i < array.length; i++) {
swap(array, i, indexOfTheSmallestStartingFrom(array, i));
System.out.println(Arrays.toString(array));
}
}
public static void main(String[] args) {
int[] values = {8, 5, 3, 7, 9, 6, 1, 2, 4};
sort(values);
}
}
答案 0 :(得分:1)
这个算法的设计非常糟糕。最小的和indexOfSmallest都使用一个循环,这将在几何上降级。
交换不应该扫描整个数组,因为你只想交换两个元素,不是全部!
你有效地做了一个泡泡排序的打击版本,但是以一种非常复杂的方式有太多的循环。这将开始与任何体面的大小列表表现可怕。
可以找到更简单的版本here
答案 1 :(得分:0)
交换方法不需要循环。因为你只想更改两个元素一次而不是n次(如果n是偶数,则导致根本不更换它们。)
答案 2 :(得分:0)
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime dateAndTimeForAccount = ZonedDateTime.ofInstant(now, zoneId);
System.out.println(dateAndTimeForAccount);