封装成函数:
//自顶向下归并排序@H_403_29@func @H_403_29@MergeSortUpToDown@H_403_29@(@H_403_29@s @H_403_29@[]@H_403_29@int@H_403_29@)@H_403_29@ @H_403_29@{@H_403_29@ aux @H_403_29@:=@H_403_29@ make@H_403_29@([]@H_403_29@,@H_403_29@ len@H_403_29@s@H_403_29@))@H_403_29@ @H_403_29@//辅助切片@H_403_29@ mergeSortUpToDown@H_403_29@ aux@H_403_29@ @H_403_29@0@H_403_29@)-@H_403_29@1@H_403_29@)@H_403_29@}@H_403_29@//自底向上归并排序@H_403_29@func @H_403_29@MergeSortDownToUp@H_403_29@ n @H_403_29@ @H_403_29@for@H_403_29@ sz @H_403_29@;@H_403_29@<@H_403_29@ n@H_403_29@*=@H_403_29@2@H_403_29@ lo @H_403_29@-@H_403_29@sz@H_403_29@+=@H_403_29@*@H_403_29@ merge@H_403_29@ lo@H_403_29@+@H_403_29@-@H_403_29@ min@H_403_29@lo@H_403_29@+@H_403_29@2@H_403_29@}@H_403_29@}@H_403_29@func mergeSortUpToDown@H_403_29@ hi @H_403_29@if@H_403_29@>=@H_403_29@ hi @H_403_29@return@H_403_29@ mid @H_403_29@lo @H_403_29@ hi@H_403_29@>>@H_403_29@1@H_403_29@ mid@H_403_29@//归并操作@H_403_29@func merge@H_403_29@ k @H_403_29@<=@H_403_29@ k@H_403_29@++@H_403_29@[@H_403_29@k@H_403_29@]@H_403_29@=@H_403_29@ s@H_403_29@ i@H_403_29@ j @H_403_29@ i @H_403_29@>@H_403_29@j@H_403_29@ j@H_403_29@else@H_403_29@i@H_403_29@func min@H_403_29@ j @H_403_29@int@H_403_29@ j@H_403_29@}@H_403_29@
测试: