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代码。但是算法看起来正确吗?