想基于对list进行快速排序的方法,对一个链表进行快速排序。但在实施的过程中不知道应该如何记录linked list中每一个node的类似角标(等价于方法中的ij),谢谢!
class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next
def quick_sort(head):
if head is None or isinstance(head.next, Node):
return head
# 选择基准元素
pivot = head.value
# 将所有小于基准元素的节点放在基准元素的左侧
left_head = Node(None)
left_tail = left_head
# 将所有大于基准元素的节点放在基准元素的右侧
right_head = Node(None)
right_tail = right_head
# 将基准元素放在中间
middle_head = Node(pivot)
middle_tail = middle_head
# 遍历链表,将节点分类
node = head.next
while node is not None:
if node.value < pivot:
left_tail.next = node
left_tail = node
elif node.value > pivot:
right_tail.next = node
right_tail = node
else:
middle_tail.next = node
middle_tail = node
node = node.next
# 结束链表
left_tail.next = None
right_tail.next = None
middle_tail.next = None
# 递归地对左侧和右侧的子链表进行排序
left_head = quick_sort(left_head)
right_head = quick_sort(right_head)
# 将所有部分合并在一起
if left_head.value is None:
left_head = middle_head
else:
left_tail.next = middle_head
middle_tail.next = right_head
return left_head
望采纳。