gpt4 book ai didi

java - 是否有节省空间的合并排序实现?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:30 25 4
gpt4 key购买 nike

我刚刚编写了这个合并排序的工作版本:

static int[] merge(int[] first, int[] second){
int totalsize = first.length + second.length;
int[] merged_array = new int[totalsize];
int i = 0, firstpointer = 0, secondpointer = 0;
while(i < totalsize){
if(firstpointer == first.length){
merged_array[i] = second[secondpointer];
++secondpointer;
}
else if(secondpointer == second.length){
merged_array[i] = first[firstpointer];
++firstpointer;
}
else if(first[firstpointer] < second[secondpointer]){
merged_array[i] = first[firstpointer];
++firstpointer;
}
else{
merged_array[i] = second[secondpointer];
++secondpointer;
}
++i;
}
return merged_array;
}

static int[] mergesort(int[] array){

if(array.length == 1){
return array;
}
else{
int length = array.length;
int[] first = Arrays.copyOfRange(array, 0, (int) length / 2);
int[] second = Arrays.copyOfRange(array, (int) length / 2, length);
return merge(mergesort(first), mergesort(second));
}

}

但是,如果您注意到,我使用 copyOfRange 函数创建一个新数组,该数组是父数组特定部分的副本。 Java 中是否有比这更节省空间的合并排序实现?

最佳答案

副本:How to sort in-place using the merge sort algorithm?

总结:是的,有内存高效的合并排序,但它们要么 a) 非常复杂,要么 b) 时间效率不高:O(n^2 log n)

基本上,不要打扰。您实际上并没有节省那么多内存,如果您真的想要,只需使用快速排序即可。

关于java - 是否有节省空间的合并排序实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com