__author__ = 'zhouhai'
#使用链表这个数据结构,对一组数据进行插入排序
class Node:
def __init__(self,number,next=None):
self.number = number
self.next = next
def __repr__(self):
return self.number
class LinkList:
def __init__(self,head):
self.head = head
def getLength(self):
if self.head == None:
return 0
count = 1
p = self.head.next
while p != None:
count += 1
p = p.next
def insert_after(self,target,number):
temp = target.next
target.next = number
number.next = temp
def printLink(self):
p = self.head
while p !=None:
print(p.number,end=' ')
p = p.next
#直接插入排序(Straight Insertion Sort)
if __name__ =='__main__':
#待排序的一组数据
numbers = [6,3,1,7,8,10,0,56,3,35,23,123,45,0,12,34,1,7]
#取第一个数,作为一个基点,此时链表只有一个数值
link = LinkList(Node(numbers[0],None))
#从第2个数字开始,依次取出每一个数字,根据数值的大小,决定插入在列表中的哪里
for i in range(1,len(numbers)):
p = link.head
pre = p
while p != None:
#找到位置,开始进行插入操作
if numbers[i] <= p.number:
temp = Node(numbers[i],None)
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
break
#否则,就取下个数值进行比较
else:
pre = p
p = p.next
#如果比较完成,链表里面都没有比这个数大的,说明这个数应该插在链表的最后面
if p == None:
pre.next = Node(numbers[i])
#使用链表这个数据结构,对一组数据进行插入排序
class Node:
def __init__(self,number,next=None):
self.number = number
self.next = next
def __repr__(self):
return self.number
class LinkList:
def __init__(self,head):
self.head = head
def getLength(self):
if self.head == None:
return 0
count = 1
p = self.head.next
while p != None:
count += 1
p = p.next
def insert_after(self,target,number):
temp = target.next
target.next = number
number.next = temp
def printLink(self):
p = self.head
while p !=None:
print(p.number,end=' ')
p = p.next
#直接插入排序(Straight Insertion Sort)
if __name__ =='__main__':
#待排序的一组数据
numbers = [6,3,1,7,8,10,0,56,3,35,23,123,45,0,12,34,1,7]
#取第一个数,作为一个基点,此时链表只有一个数值
link = LinkList(Node(numbers[0],None))
#从第2个数字开始,依次取出每一个数字,根据数值的大小,决定插入在列表中的哪里
for i in range(1,len(numbers)):
p = link.head
pre = p
while p != None:
#找到位置,开始进行插入操作
if numbers[i] <= p.number:
temp = Node(numbers[i],None)
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
break
#否则,就取下个数值进行比较
else:
pre = p
p = p.next
#如果比较完成,链表里面都没有比这个数大的,说明这个数应该插在链表的最后面
if p == None:
pre.next = Node(numbers[i])
link.printLink()
总结:对于链表还用得不熟悉,需要对链表头的插入做特殊处理。否则会出现问题
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p