插入排序输出不符合预期

时间:2016-12-10 19:38:47

标签: java arrays sorting break insertion-sort

我的插入排序输出不正确。当我试图调用insertionSort方法时,返回的数组没有排序

是否正确使用break语句?

public int[] insertionSort(int [] arr){
    for(int i=1;i<arr.length;i++){
        for(int j=0;j<=i-1;){
            int temp;
            if(arr[i] < arr[j]){
                temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; 
                break;
            }
            else j++;
            }
        }
        return arr;
}

使用int [] array = {10,5,6,7,1,9,3,8}调用方法,但结果不正确:

  

排序后的输出:1,3,7,8,5,10,6,9,//输出没有排序但是有点改变

1 个答案:

答案 0 :(得分:1)

以下是有效的代码:

public static int[] insertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int j = i;
            while (j > 0 && arr[j] < arr[j - 1]) {
                // Swap
                int tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;

                j--;
            }
        }
        return arr;
    }

您的代码的一个问题是您将i-th元素放在正确的位置,但可能会弄乱已经位于正确位置的元素的位置。

插入排序的想法是将i-th元素插入正确的位置,这意味着您必须将所有元素移动到右侧。但是,在您的情况下,您只需在找到正确的位置后交换j-th元素和i-th

示例: 1 3 5 8 10这是数组的当前状态 现在你尝试插入元素6,你发现正确的位置是3,所以你交换它们,结果是: 1 3 5 6 10 8混淆了数字8的位置。

相关问题