📅  最后修改于: 2023-12-03 15:36:38.279000             🧑  作者: Mango
冒泡排序是一种基本排序算法,其核心思想是比较相邻元素,如果它们的顺序不正确,则交换它们。对于一个无序的链表,可以使用冒泡排序来对其进行排序。
使用两个指针p和q,分别指向链表的头结点和头结点的下一个结点,循环遍历链表,每次比较p和q所指向的结点的值,如果p > q,则交换它们的值。遍历完一遍后,q指向头结点的下一个结点,再次循环遍历,直到没有需要交换的结点为止,排序完成。
def bubble_sort_linked_list(head):
if not head or not head.next:
return head
p = head
q = head.next
end = None
while end != head.next:
while q != end:
if p.val > q.val:
p.val, q.val = q.val, p.val
p = q
q = q.next
end = p
p = head
q = head.next
return head
为了验证排序结果是否正确,可以编写一个测试用例来测试。
class Node:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def create_linked_list(nums):
head = Node()
p = head
for num in nums:
p.next = Node(num)
p = p.next
return head.next
def linked_list_to_list(head):
res = []
p = head
while p:
res.append(p.val)
p = p.next
return res
def test_bubble_sort_linked_list():
nums = [6, 5, 3, 1, 8, 7, 2, 4]
head = create_linked_list(nums)
new_head = bubble_sort_linked_list(head)
assert linked_list_to_list(new_head) == sorted(nums)
test_bubble_sort_linked_list()
对于一个无序的链表,使用冒泡排序算法可以对其进行排序,代码实现简单,时间复杂度为O(n ^ 2)。