面试题:Python实现双向链表快速排序

      市面上流行着这样一道面试题,说是需要10分钟写出来。如果没做过练习的,这道题还真没那么容易快速实现。在下拿Python通过50行代码实现一遍,以便各位不时之需。

1)step1:定义节点

class  Node:
    def __init__(self,val):
        self.val=val    #节点值
        self.pre=None   #上个节点指针
        self.next=None  #下个节点指针

2)step2:通过数组初始化双向链表

def  initDoubleLinkedList(arr):
    dummy=Node(-1)            #定义临时头节点
    cur=dummy
    for  item in arr:
        add=Node(item)
        cur.next=add
        add.pre=cur
        cur=cur.next
    return  dummy.next,cur   #返回头节点和尾节点

3)step3:链表打印显示

def  traverse(linked_list):
    while linked_list:
        print(linked_list.val,end=' ') #同一行显示
        linked_list=linked_list.next
    print() #换行

4)step4:快速排序主方法

def  quickSort(start,end):
    if start==None or start==end: return
    part=partition(start,end)     #把数组分成左右两部分,递归排序
    if part!=start:
        quickSort(start,part.pre)
    if part!=end:
        quickSort(part.next,end)

5)step5:快排核心方法

def  partition(start,end):
    if start==end: return
    key=start.val       #选定头节点,并找到其在列表中的正确位置
    while start!=end:
        while start!=end and end.val>=key:   #右侧数值比key大,则指针左移
            end=end.pre
        start.val=end.val  #把右侧小值交换到左侧节点
        while start!=end and start.val<=key: #左侧数值比key小,则指针右移
            start=start.next                 
        end.val=start.val   #把左侧大值交换到右侧节点
    start.val=key  #key值放到搜索到的结果位置上
    return  start

6)step6:测试方法:

def testQuickSort():
    arr1 = [2, 3, 7, 5, 1, 23, 14, 8, 2, 9, 6]
    start,end = initDoubleLinkedList(arr1)
    traverse(start)
    quickSort(start,end)
    traverse(start)

结果截图:

      以上就是该算法的实现步骤,有问题的话望留言指正。对各位如果有些许帮助,但求一赞!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值