我有这个Pseudocode用于合并排序。但不清楚它是如何工作的。有人可以向我解释一下吗?
for i=1 ; i<size ; i=2i
for j=0 ; j<size - i ; j= j+2i
Merge(&A[j] , i , min(2i,size-j))
Merge()方法是:
Merge(A, end1, end2)
i = 0; j = end1 ; k =0
while i<end1 and j<end2
if(A[i] < A[j])
temp[k] = A[i]
else
temp[k] = A[j]
j = j+1, k=k+1
while i<end1
temp[k] = A[i]
i = i+1 , k=k+1
while j<end2
temp[k] = A[j]
j = j+1 , k=k+1
for(i=0 ; i<end2; i++)
A[i] = temp[i]
来源: http://www.youtube.com/watch?v=GCae1WNvnZM&list=PL89B61F78B552C1AB&index=4
如果有人能给我更好的算法教程来源,那也很棒...... 提前致谢。 : - )
答案 0 :(得分:1)
让我们从合并操作开始:它将两个连续存储的序列作为输入。该函数将两个序列中的所有元素复制到临时存储器,始终选择两者中最小的一个(当任一序列耗尽时,复制继续另一个序列)。然后将所有元素复制回原始存储。
如果您承认两个输入序列是按排序顺序提供的,则合并的结果是单个排序序列。
现在是主程序。它由两个嵌套循环组成。外部的一个监视序列的长度,从1开始,每次都加倍。内部循环一次采用两个序列,计算它们存储的位置,并将它们合并为一个。
这里有MergeSort的魔力:最初,所有元素都形成1个元素的序列,这些元素显然是有序的。在一次传递(内部循环)之后,您将获得2个元素的排序序列。然后是4 ......直到仍然存在单个排序序列。
|e|b|g|h|c|a|f|d|
|be|gh|ac|df|
|begh|acdf|
|abcdefgh|
答案 1 :(得分:0)
这个想法如下:
mergesort(array)
可以定义为:
mergesort
; Merge sort维基页面可能有用。此外,如果您对算法感兴趣,请尝试阅读this book,这真的很棒。