Sorting 合并排序实现

Sorting 合并排序实现,sorting,Sorting,我很难得到正确的排序列表。我不确定我做错了什么 merge_sort = function(list) { #split list in half #sort each half #merge each half if(length(list<2)) result = list else { middle = ceiling(length(list)/2) left = list[1:middl

我很难得到正确的排序列表。我不确定我做错了什么

merge_sort = function(list)
{
    #split list in half
    #sort each half
    #merge each half
    if(length(list<2))
        result = list
    else
    {
        middle = ceiling(length(list)/2)
        left = list[1:middle]
        right = list[middle+1:length(list)]
        merge_sort(left)
        merge_sort(right)
        while(min(length(left),length(right)) >0)
        {
            if(left[1] < right[1])
            {
                result = c(result,left[1])
                if(min(length(left),length(right)) >= 2)
                { 
                result = c(result,left[2:length(left)])
                result = c(result, right[2:length(right)])
                }
            }               
            else
            {
                result = c(result,right[1])
                if(min(length(left),length(right)) >= 2)
                { 
                result = c(result,right[2:length(right)])
                result = c(result, left[2:length(left)])
                }
            }
        }

    }
    return(result)
    print(result)
}
merge\u sort=函数(列表)
{
#把名单一分为二
#每一半排序
#合并每一半
如果(长度(列表0)
{
if(左[1]<右[1])
{
结果=c(结果,左[1])
如果(最小值(长度(左),长度(右))>=2)
{ 
结果=c(结果,左[2:长度(左)])
结果=c(结果,右侧[2:长度(右侧)])
}
}               
其他的
{
结果=c(结果,右[1])
如果(最小值(长度(左),长度(右))>=2)
{ 
结果=c(结果,右侧[2:长度(右侧)])
结果=c(结果,左[2:长度(左)])
}
}
}
}
返回(结果)
打印(结果)
}

是否您应该使用
right=list[middle:length(list)]
而不是
right=list[middle+1:length(list)]
我将原始列表作为输出。这意味着如果我输入4,3,2,1,我将得到4,3,2,1作为输出。顺便问一下,这是R代码。但是算法看起来正确吗?