首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归冒泡排序Python与R相比不起作用

递归冒泡排序Python与R相比不起作用
EN

Stack Overflow用户
提问于 2016-12-05 13:54:48
回答 1查看 548关注 0票数 0

我是Python的新手。相同的代码在R上工作得很好,但我不明白为什么它在Python中不能工作.

Python:

代码语言:javascript
复制
#swap pair
def swap_pair(xpair):
    if xpair[0] > xpair[1]:
        xpair.reverse()
    else:
        xpair
    return xpair

#swap_pass
def swap_pass(xlist):
    for i in range(0,len(xlist)-1):
        xlist[i:i+2] = swap_pair(xlist[i:i+2])
    return xlist

def bubble_sort(data):
    newdata = swap_pass(data)
    if data == newdata:
        return(newdata)
    else:
        return bubble_sort(newdata)

test = [100,6,5,3,2,1]
bubble_sort(test)

出局: 6,5,3,2,1,100

下面是R中的相同代码,它们工作得很好:

代码语言:javascript
复制
swap_if_larger = function(pair) {
  if( pair[1] > pair[2] )
    return(rev(pair)) else
      return(pair)
}

swap_pass = function(vec) { 
  for(i in seq(1, length(vec)-1)) { 
    vec[i:(i+1)] = swap_if_larger(vec[i:(i+1)]) 
  }
  return(vec)
}

bubble_sort = function(vec) {
  new_vec = swap_pass(vec)
  if( isTRUE(all.equal(new_vec, vec)) ) { 
    return(new_vec) 
  } else {
    return(bubble_sort(new_vec))
  }
}

test = c(100,6,5,3,2,1)
bubble_sort(test)

Bubble_sort(测试) 1 1 2 3 5 6 100

你能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 14:01:11

您的swap_pass正在适当地改变data并返回它。所以在bubble_sort中,datanew_data都是对同一个list的引用。如果要避免这种情况,请在调用时复制,因此实际上有两个不同的list

代码语言:javascript
复制
def bubble_sort(data):
    newdata = swap_pass(data[:])  # Empty slice copies data before passing to swap_pass
    if data == newdata:
        return(newdata)
    else:
        return bubble_sort(newdata)

或者,让swap_pass为您做副本,这样调用者就不需要考虑它(这通常是Pythonic的方法;Python函数要么变异参数,什么都不返回,要么返回一个新值并保持参数不变,他们不会变异和返回):

代码语言:javascript
复制
def swap_pass(xlist):
    xlist = xlist[:]  # Add shallow copy before doing work
    for i in range(0,len(xlist)-1):
        xlist[i:i+2] = swap_pair(xlist[i:i+2])
    return xlist
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40975898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档