簡體   English   中英

數組后面的Java插入排序算法

[英]Java insertion sort algorithm from the back of the array

因此,我一直在嘗試編寫插入排序算法,以便將值插入到數組的后面而不是前面(將最大的值放在后面而不是最小的值放在前面),而我一直很難看到如果我做對了。 如果有人可以告訴我我是否有正確的主意,那就太好了。 這是我的代碼,它似乎無法正常運行:

public static void insertionSort(Comparable[] item, int size) {
    for (int k = size - 1; k > 0; k--)
        insertInOrder(item, k);
}

private static void insertInOrder(Comparable[] item, int m) {
    Comparable save = item[m];
    for (; m > 0 && item[m-1].compareTo(save) > 0; m--)
        item[m] = item[m - 1];
    item[m] = save;
}

您的代碼有兩個問題。 這是固定版本:

public static void insertionSort(Comparable[] item, int size) {
    // Changed to k >= 0, otherwise we would have ignored the 0th
    // element and not move it to higher positions in the array
    for (int k = size - 1; k >= 0; k--)
        insertInOrder(item, k, size);
}

// Added size as a parameter
private static void insertInOrder(Comparable[] item, int m, int size) {
    Comparable save = item[m];
    // This loop needs to count upward, because you
    // want to move large values towards the back
    for (; m + 1 < size && item[m+1].compareTo(save) < 0; m++)
        item[m] = item[m + 1];
    item[m] = save;
}

補充筆記:

  • 通常,我們將數組的名稱復數,即: Comparable[] items
  • 考慮對Comparable類型使用泛型。
  • 下次在Code Review Stack Exchange上提問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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