簡體   English   中英

交換數組中的兩個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM