J***2 发帖数: 135 | 1 应该是第四版吧。2.1,题目是把['a1','a2'...'an','b1'...'bn']转化为['a1','b1'.
..'an','bn']
算法用devide and conquer,可是中间需要交换2个set的位置。为了实现这个exchange
算法已经用了两天时间了。求问有没有大哥大姐们写过这个算法的 特别是
exchange list[p,r] and list[r+1,q]
如果能给出代码的话,小弟感激不尽啊。伪代码也可以,谢谢,谢谢 | p*****2 发帖数: 21240 | | l*****a 发帖数: 14598 | 3 直接交换不成吗?###假定调用时参数都legal
public void swap(T[] input,int p,int r,int q)
{
for(int step=0;step<=r-p;step++) {
T temp=input[p+step];
input[p+step]=input[r+1+step];
input[r+1+step]=temp;
}
}
'.
exchange
【在 J***2 的大作中提到】 : 应该是第四版吧。2.1,题目是把['a1','a2'...'an','b1'...'bn']转化为['a1','b1'. : ..'an','bn'] : 算法用devide and conquer,可是中间需要交换2个set的位置。为了实现这个exchange : 算法已经用了两天时间了。求问有没有大哥大姐们写过这个算法的 特别是 : exchange list[p,r] and list[r+1,q] : 如果能给出代码的话,小弟感激不尽啊。伪代码也可以,谢谢,谢谢
| J***2 发帖数: 135 | 4 我就是这么写的。可是结果不对
我的代码:
def ReOrder(arr,p,q):
if(p==q):
return arr
else:
r=(p+q)/2
np=(p+r)/2
nq=(r+1+q)/2
# switch
for i in range(0,(r-np+1)):
temp=arr[np+i]
arr[np+i]=arr[r+1+i]
arr[r+1+i]=temp
print 'step {0}:switch {1} <-->{2}'.format(i,arr[np+i],arr[r+1+i
])
# switch end
print 'current list:'
print arr
print '-'*30
ReOrder(arr,p,r)
ReOrder(arr,r+1,q)
return arr
list=['a1','a2','a3','a4','a5','b1','b2','b3','b4','b5']
list=ReOrder(list,0,len(list)-1)
print list
上面是python代码,大家帮我看看错在哪儿吧。小弟在这里谢谢了。
【在 l*****a 的大作中提到】 : 直接交换不成吗?###假定调用时参数都legal : public void swap(T[] input,int p,int r,int q) : { : for(int step=0;step<=r-p;step++) { : T temp=input[p+step]; : input[p+step]=input[r+1+step]; : input[r+1+step]=temp; : } : } :
| l*****a 发帖数: 14598 | 5 r-np+1 换成r-np什么结果?
【在 J***2 的大作中提到】 : 我就是这么写的。可是结果不对 : 我的代码: : def ReOrder(arr,p,q): : if(p==q): : return arr : else: : r=(p+q)/2 : np=(p+r)/2 : nq=(r+1+q)/2 : # switch
| p*****2 发帖数: 21240 | 6
如果是奇数怎么办呀?比如swap [1,2,3]
p=0 r=0 q=2
【在 l*****a 的大作中提到】 : 直接交换不成吗?###假定调用时参数都legal : public void swap(T[] input,int p,int r,int q) : { : for(int step=0;step<=r-p;step++) { : T temp=input[p+step]; : input[p+step]=input[r+1+step]; : input[r+1+step]=temp; : } : } :
| q********s 发帖数: 1032 | 7 第五版原题是singly linked list 或者 double list。如果是arrary的,直接交换就
可以了。
难道第四版不同?
'.
exchange
【在 J***2 的大作中提到】 : 应该是第四版吧。2.1,题目是把['a1','a2'...'an','b1'...'bn']转化为['a1','b1'. : ..'an','bn'] : 算法用devide and conquer,可是中间需要交换2个set的位置。为了实现这个exchange : 算法已经用了两天时间了。求问有没有大哥大姐们写过这个算法的 特别是 : exchange list[p,r] and list[r+1,q] : 如果能给出代码的话,小弟感激不尽啊。伪代码也可以,谢谢,谢谢
|
|