您的位置:首页 > 理论基础 > 数据结构算法

#使用链表这个数据结构,对一组数据进行插入排序

2017-09-13 09:55 302 查看
__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])

    link.printLink()

总结:对于链表还用得不熟悉,需要对链表头的插入做特殊处理。否则会出现问题

                if p == link.head:

                    temp.next = p

                    link.head = temp

                else:

                    pre.next = temp

                    temp.next = p
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐