在包含重复整数的排序列表中,更新元素,使所有元素都是唯一的并且仍然排序

时间:2017-08-01 00:48:36

标签: java arrays algorithm sorting duplicates

给定一个可能包含重复项的整数排序列表,确保所有整数都是唯一的有效算法是什么,并且列表仍然按照最少的编辑次数进行排序。人们可以采取贪婪的方法,但这不会导致最少的编辑次数。

例如,给定列表[0,1,1,1,2,3,4], [-2,-1,0,1,2,3,4]需要的编辑量少于[0,1,2,3,4,5,6]。

鉴于列表[0,1,1,3,4],[0,1,2,3,4]将是最有效的。 似乎这不能在线性时间内完成。

1 个答案:

答案 0 :(得分:0)

插入排序是一种简单的排序算法,它一次构建一个最终排序数组。

  

注意:大型列表的效率远低于其他排序算法。

插入排序通过在每次重复时使用一个输入元素并生成已排序的输出列表来遍历列表。在重复时,插入排序从输入数据中删除一个元素,在排序列表中找到它所属的位置,然后将其插入到那里。它会重复,直到没有输入元素为止。

考虑给定的代码:

public class Main {
    public static void main(String[] args) {
        int[] arr1 = {0,1,1,1,7,6,7,88,42};
        int[] arr2 = doInsertionSort(arr1);
        for(int i:arr2){
            System.out.print(i);
            System.out.print(", ");
    }
    }
 public static int[] doInsertionSort(int[] input){

        int temp;
        for (int i = 1; i < input.length; i++) {
            for(int j = i ; j > 0 ; j--){
                if(input[j] < input[j-1]){
                    temp = input[j];
                    input[j] = input[j-1];
                    input[j-1] = temp;
                }
            }
        }
        return input;
    }
}

我希望它会有所帮助。谢谢!