'''
Created on 2011-9-16
@author: guolongcang
'''
test=[9,2,3,5,7]
def ShellSort(data,flag):
'''
data: list,to be sorted
flag: 0->asc,1->desc
return a new sorted list
'''
retData=[]
#copy data to retData
for item in data:
retData.append(item)
#sort retData
count=len(retData)
step=count/2;
while step>0:
i=0
while i<count:
j=i+step
while j<count:
t=retData.pop(j)
k=j-step
#asc
if flag==0:
while k>=0:
if t>=retData[k]:
retData.insert(k+1, t)
break
k=k-step
if k<0:
retData.insert(0, t)
#desc
elif flag==1:
while k>=0:
if t<=retData[k]:
retData.insert(k+1, t)
break
k=k-step
if k<0:
retData.insert(0, t)
j=j+step
i=i+1
step=step/2
return retData
data=ShellSort(test,0)
print 'Asc:',data
data=ShellSort(test,1)
print 'Desc:',data
输出结果:
Asc: [2, 3, 5, 7, 9]
Desc: [9, 7, 5, 3, 2]