美文网首页
链表快排

链表快排

作者: cookyo | 来源:发表于2019-08-12 18:56 被阅读0次
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def qsort(start, end):
    if start == end:
        return 
    pivot = start.val
    p = start
    q = start.next
    #count = 1
    while(q != end):
        if q.val < pivot:
            p = p.next
            # p一直记录小于pivot的最后一个位置
            p.val, q.val = q.val, p.val
        q = q.next
        #print('count: ', count)
        count += 1
    start.val, p.val = p.val, start.val
    qsort(start, p)
    qsort(p.next, end)
link = [3,6,4,6,3,9,0,12,13,53,1,12,34]
head = ListNode(link[0])

p = head
for i in range(1, len(link)):
    p.next = ListNode(link[i])
    p = p.next

end = p.next
qsort(head, end)
while head:
    print(head.val, end=' ')
    head = head.next

### output:
0 1 3 3 4 6 6 9 12 12 13 34 53 

相关文章

  • 链表快排

  • 单链表快排

    单链表快速排序 - Jensen抹茶喵 - 博客园 图 单链表的快速排序 - CSDN博客

  • 链表排序

    链表适合插入和删除,不适合检索,尤其是单向链表中寻找节点的父节点。 快排:可参考快排常见的三种策略。除了插入策略之...

  • 面试算法题

    排序:选择排序,冒泡排序,快排,堆排,希尔排序 反转链表 删除链表的倒数第N个节点 数组中第K个最大元素 翻转数字...

  • 腾讯优图常见算法题

    最常见的: 一、 两数之和 二、链表反转 三、环状链表 四、快排 五、合并两个有序链表 六、最大子序和 七、最长上...

  • 单链表归并排序+快排

    归并排序 用快慢指针获取中间点 用middle指向中间点,p指向middle->next middle->next...

  • 算法

    单链表快排快排最核心的思想就是划分,确定一个枢轴元素(pivot),每一趟划分的目的就是把待排序列分为两部分,前一...

  • LeetCode 力扣 86. 分隔链表

    题目描述(中等难度) 题目描述的很难理解,其实回想一下快排就很好理解了。就是快排的分区,将链表分成了两部分,一部分...

  • 一刷到底。。

    归并快排堆排序模拟堆01背包完全背包问题多重背包问题多重背包问题2链表排序多链表合并字符串哈希字典树单调栈单调队列...

  • 面试问到的算法

    快排,冒泡区别,两数之和,反转链表,判断环,数组中重复数组350 力扣 力扣26题

网友评论

      本文标题:链表快排

      本文链接:https://www.haomeiwen.com/subject/pulpjctx.html