[英]Swapping two elements in an array
我在做mooc.fi,我的代碼可以用,但是不會提交。
我遇到的錯誤
方法交換無法與參數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);
}
}
該算法的設計非常糟糕。 最小和indexOfSmallest都使用循環,這會在幾何上降低性能。
交換不應該掃描整個數組,因為您只想交換兩個元素, 而不是全部!
實際上,您實際上是在進行冒泡排序的怪異版本,但是以一種非常復雜的方式進行了太多循環。 對於任何大小合適的列表,這將開始令人恐懼地執行。
在這里可以找到更簡單的版本
您不需要為swap方法循環。 因為您只想更改兩個元素一次而不是n次(如果n是偶數,則根本不交換它們)。
public int[] swapArrayElement(int arr[], int a, int b) {
int index1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == a || arr[i] == b) {
index1 = i;
if (arr[i] == a) {
for (int k = index1; k < arr.length; k++) {
if (arr[k] == b) {
arr[k] = arr[index1];
arr[index1] = b;
}
}
return arr;
} else if (arr[i] == b) {
{
for (int k = index1; k < arr.length; k++) {
if (arr[k] == a) {
arr[k] = arr[index1];
arr[index1] = a;
}
}
}
return arr;
}
}
}
return arr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.