冒泡排序算法是一种简单的排序算法,其基本思想是依次比较相邻元素的大小,如果左侧元素大于右侧元素,则进行交换,一轮比较完毕之后,最大的元素就会“冒泡”到数组的末尾。重复进行上述操作,直到数组排序完成。
冒泡排序的时间复杂度为 O(n^2),在数据量较小的情况下表现良好,但在大规模数据排序时会效率低下。
算法实现
冒泡排序算法可以使用以下的代码实现:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
上述代码使用了Python语言编写,但其思路与其他语言编写的冒泡排序算法是类似的。代码中使用了两层循环嵌套,第一层循环表示进行的轮数,第二层循环表示每轮比较相邻元素的次数。如果相邻元素大小不符合排序要求,则进行交换。
示例说明
下面通过两个示例说明冒泡排序的作用和使用方法。
示例一:对数值型数组进行排序
假设现有一个数组 [4, 2, 1, 3, 5],需要对其进行升序排序,可以使用冒泡排序算法进行排序。代码如下:
arr = [4, 2, 1, 3, 5]
sorted_arr = bubble_sort(arr)
print(sorted_arr)
输出结果为:
[1, 2, 3, 4, 5]
可以看到,冒泡排序算法使得原数组中的元素被重新排列,从而使其成为一个按照升序排列的新数组。
示例二:对对象数组进行排序
在实际开发中,我们可能需要对一组对象按照某个属性进行排序。可以使用冒泡排序算法对对象数组进行排序。代码如下:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'{self.name} ({self.age})'
def bubble_sort_persons(persons, key):
n = len(persons)
for i in range(n):
for j in range(0, n - i - 1):
if getattr(persons[j], key) > getattr(persons[j + 1], key):
persons[j], persons[j + 1] = persons[j + 1], persons[j]
return persons
persons = [
Person('张三', 18),
Person('李四', 22),
Person('王五', 14),
Person('赵六', 25),
]
sorted_persons = bubble_sort_persons(persons, 'age')
for person in sorted_persons:
print(person)
输出结果为:
王五 (14)
张三 (18)
李四 (22)
赵六 (25)
可以看到,对象数组被按照属性 age 进行了排序,并输出了排序后的结果。在实际使用中,我们只需要根据需要修改 Person 类的定义和调用代码即可对不同属性进行排序。