На различни уебсайтове псевдокодът е подобен на този по-долу:
merge_sort(num_list)
length <-- length of num_list
if length > 1
shorter_list_A <-- first half of num_list
shorter_list_B <-- second half of num_list
result_A <-- merge_sort(shorter_list_A)
result_B <-- merge_sort(shorter_list_B)
sorted_list <-- merge(result_A, result_B)
return sorted_list
else
return num_list
end
И така, ако имаме 4 числа: 8,3,6,2
MergeSort(8,3,6,2)
първата половина от числата, поставени в Shorter_list_A(8,3), а втората половина от числата, поставени в Shorter_list_B(6,2)
shorter_list_A <-- first half of num_list
shorter_list_B <-- second half of num_list
Така че сега имаме два списъка: shorter_list_A(8,3) и Shorter_list_B (6,2)
result_A <-- merge_sort(shorter_list_A)
Merge_sort извиква merge_sort отново, така че какво се случва там е следното:
merge_sort(Shorter_list_A) // also 8,3
length <-- length of Shorter_list_A
if length > 1
shorter_list_A <-- first half of Shorter_list_A
//8 put to Shorter_list_A
shorter_list_B <-- second half of Shorter_list_A
//3 put to Shorter_list_B
result_A <-- merge_sort(shorter_list_A)
//merge_sort calls merge_sort again
result_B <-- merge_sort(shorter_list_B)
sorted_list <-- merge(result_A, result_B)
return sorted_list
else
return Shorter_list_A
end
Така че сега отново имаме два списъка: shorter_list_A(8) и Shorter_list_B (6)
От обяснението досега правилно ли съм разбрал това или напълно погрешно?
След това отново извиква merge_sort. Тъй като дължината на Shorter_list_A е само 1, той съдържа само едно число, което е 8. Какво се случва там е следното:
merge_sort(Shorter_list_A)
length <-- length of Shorter_list_A
return Shorter_list_A
end
Връща Shorter_list_A, което е 8.
Какво връщане има точно тук? Заклещен съм там.