快速排序:
def sort(a,l,r):
if l>=r:
return
left=l
right=r
base=a[l]
while left!=right:
while left!=right and a[right] > base:
right-=1
a[left]=a[right]
while left!=right and a[left] <= base:
left+=1
a[right]=a[left]
a[left]=base
print(right,left)
sort(a,l,left-1)
sort(a,right+1,r)
b=[2,43,12,1,3,5,9,12,23,1]
sort(b,0,len(b)-1)
print(b)
链表
class node:
def __init__(self,data,next=None):
self.data=data
self.next=next
class linked_list:
def __init__(self,node):
self.node=node
def insert(self,node):
p=self.node
while p:
i=p
p=p.next
i.next=node
def listed(self):
p=self.node
while p:
print(p.data)
p=p.next
b=linked_list(node('1',node('2',node('3'))))
b.insert(node('4'))
b.insert(node('5'))
print(b.listed())
堆排序
class Sort:
def __init__(self,li):
self.li=li
def insert(self,a):
self.li.append(a)
q=len(self.li)-1 #a下标
while q>0:
temp_q=q
if q%2 == 1 and self.li[q] > self.li[int((q-1)/2)]: #左节点
p=self.li[int((q-1)/2)] #父节点值
self.li[int((q-1)/2)]=self.li[int(q)]
self.li[q]=p
q=int((q-1)/2) #更新节点下标
elif q%2 == 0 and self.li[q] > self.li[int((q-2)/2)]: #右节点
p=self.li[int((q-2)/2)] #父节点值
self.li[int((q-2)/2)]=self.li[int(q)]
self.li[q]=p
q=int((q-2)/2) #更新节点下标
else:
break
b=[1]
c=Sort(b)
c.insert(4)
c.insert(3)
c.insert(6)
c.insert(2)
print(b)