数据结构与算法之链表 链表冒泡排序 相邻节点交换 实践

数据结构与算法阿木 发布于 2025-07-11 6 次阅读


链表冒泡排序:相邻节点交换的实践与探索

链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表在内存中分配不连续,因此在某些情况下比数组更灵活。冒泡排序是一种简单的排序算法,它通过相邻元素的比较和交换来逐步将列表排序。本文将探讨如何使用冒泡排序算法对链表进行排序,并实现相邻节点交换的功能。

链表冒泡排序的基本原理

冒泡排序的基本思想是通过重复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行,直到没有再需要交换的元素为止,这意味着该数列已经排序完成。

对于链表来说,冒泡排序的过程与数组类似,但是需要特别注意节点的交换操作。由于链表节点不连续,我们不能像数组那样直接交换元素。我们需要通过改变节点的指针来实现相邻节点的交换。

链表节点定义

我们需要定义一个链表节点类,它包含数据和指向下一个节点的指针。

python

class ListNode:


def __init__(self, value=0, next=None):


self.value = value


self.next = next


链表冒泡排序实现

接下来,我们将实现链表的冒泡排序算法。我们将编写一个函数 `bubble_sort` 来对链表进行排序。

python

def bubble_sort(head):


if not head or not head.next:


return head

swapped = True


while swapped:


swapped = False


current = head


while current.next:


if current.value > current.next.value:


交换节点值


current.value, current.next.value = current.next.value, current.value


swapped = True


current = current.next


return head


在上面的代码中,我们使用了一个布尔变量 `swapped` 来跟踪在一次遍历中是否发生了交换。如果在一次遍历中没有发生任何交换,那么链表已经排序完成,我们可以停止算法。

测试链表冒泡排序

为了验证我们的冒泡排序算法,我们可以创建一个链表并对其进行排序。

python

def print_list(head):


current = head


while current:


print(current.value, end=" ")


current = current.next


print()

创建链表


node1 = ListNode(4)


node2 = ListNode(2)


node3 = ListNode(1)


node4 = ListNode(3)


node1.next = node2


node2.next = node3


node3.next = node4

打印原始链表


print("Original list:")


print_list(node1)

排序列表


sorted_head = bubble_sort(node1)

打印排序后的链表


print("Sorted list:")


print_list(sorted_head)


总结

本文介绍了如何使用冒泡排序算法对链表进行排序。我们首先定义了链表节点类,然后实现了冒泡排序函数,并通过测试验证了算法的正确性。链表冒泡排序的关键在于处理相邻节点的交换,通过改变节点的指针来实现排序。

虽然冒泡排序在链表上的实现相对简单,但它的效率较低,对于大数据量的链表排序来说,可能不是最佳选择。在实际应用中,可以考虑使用更高效的排序算法,如归并排序或快速排序,这些算法在链表上的实现也很有趣。