插入排序 - 降序

时间:2013-03-08 15:53:56

标签: java algorithm sorting insertion-sort

很抱歉,如果它是一个基本问题......

我只是想了解更多算法...

我写了一个简单的代码来按升序执行插入排序,但由于某些原因我无法按降序执行排序。

我尝试更改比较键(while(i> 0&& a [i]>键)到(i> 0&& a [i]< key))..它似乎部分工作,但第一个元素没有得到排序,我得到以下结果..有人让我知道我错在哪里?

1 11 10 9 五 4 3 2

public class InsertionSort {
    public static void main(String args[]) {
        int[] a = { 1,10,11,5, 9, 3, 2, 4 };
        // Loop through the entire array length. Consider you already have one
        // element in array, start comparing with
        // first element
        for (int j = 1; j < a.length; j++) {
            // Get the key (The value that needs to be compared with existing
            // values.
            int key = a[j];
            // Get the array index for comparison, we need to compare with all
            // other elements in the array with
            // key
            int i = j - 1;
            // While i > 0 and when key is less than the value in the array
            // shift the value and insert
            // the value appropriately.
            //System.out.println(j);
            while (i > 0 && a[i] < key) {
                a[i + 1] = a[i];
                i = i - 1;
                a[i + 1] = key;
            }
        }
        for (int k = 0; k < a.length; k++) {
            System.out.println(a[k]);
        }
    }
}

4 个答案:

答案 0 :(得分:9)

您永远不会触及

中的a[0]
while (i > 0 && a[i] < key) {

所以它没有排到正确的位置。使用>=代替>

while (i >= 0 && a[i] < key) {

按升序排序时会出现同样的问题。

答案 1 :(得分:2)

数组中的第一个元素是a[0]。你不是在任何地方进行比较。

答案 2 :(得分:1)

从0开始,数组a []到达第一个元素a [0]。因此,[j]中的第一个元素将是[0]而不是[1];

答案 3 :(得分:1)

public static void insertionSort(int[] arr)
    {
        for (int i = 1; i < arr.length; i++)
        {
            int curNumber = arr[i];
            int curIndex = i-1;
            while ( curIndex >= 0 && arr[curIndex] < curNumber)
            {
                arr[curIndex+1] = arr[curIndex];
                curIndex--;
            }
            arr[curIndex+1] = curNumber;
        }
    }