Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 合并排序数组与合并排序链表_Arrays_Sorting_Linked List - Fatal编程技术网

Arrays 合并排序数组与合并排序链表

Arrays 合并排序数组与合并排序链表,arrays,sorting,linked-list,Arrays,Sorting,Linked List,合并两个长度为n和m的排序数组或合并两个长度为n和m的排序链表,哪个更快 我需要一个数据结构来存储我只需要执行两个操作的项目集合: pop()返回并删除此列表的第一项 和merge()合并两个已排序的列表 由于这些是我需要执行的唯一操作,所以在我看来,最有效的解决方案是链表,但是数组可能更好,或者可能存在第三种优于两者的选项 我有一个在编译时之前指定的列表长度上限,但我希望能够改变这个上限。例如,在我运行程序之前,我可能知道列表长度最多为10000,但我可能希望再次运行长度小于1000000的列

合并两个长度为n和m的排序数组或合并两个长度为n和m的排序链表,哪个更快

我需要一个数据结构来存储我只需要执行两个操作的项目集合:

pop()返回并删除此列表的第一项

和merge()合并两个已排序的列表

由于这些是我需要执行的唯一操作,所以在我看来,最有效的解决方案是链表,但是数组可能更好,或者可能存在第三种优于两者的选项

我有一个在编译时之前指定的列表长度上限,但我希望能够改变这个上限。例如,在我运行程序之前,我可能知道列表长度最多为10000,但我可能希望再次运行长度小于1000000的列表的程序

另外,如果数组是更好的选择,那么如何有效地合并数组?我很清楚链表是如何做到这一点的,但对于数组,似乎需要不断地向下移动内容,这将是非常低效的


感谢您的帮助

LinkedList需要比通常的数组更多的开销。。。数据大小未知时使用LinkedList。要合并两个数组,您需要分配足够的内存来包含合并的数组,然后逐个复制值。这可能比合并两个链表要快,因为数组中的元素连续存储在内存中,这意味着可以高效地使用CPU缓存。但是您应该自己测试它,因为您的特定用例可能会产生意外的结果。假设没有push(),并且pop()可以增加指向数组的索引或指针,从而有效地将数组大小减少1,那么数组会更快。如果允许merge()创建与两个原始数组大小之和相同大小的新数组(可以选择释放或删除两个原始数组),则merge()使用数组会更快。