冒泡排序和插入排序算法实现:升序降序排序详解
冒泡排序和插入排序算法实现:升序降序排序详解
本文将介绍两种常见的排序算法:冒泡排序和插入排序。我们将提供详细的算法设计、代码实现和使用示例,帮助您理解这两种算法并能够将其应用于实际问题中。
1. 冒泡排序算法
冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,如果顺序不对则交换它们的位置。每一次遍历都会将最大的(升序)或最小的(降序)元素移动到列表的末尾。如果在一轮遍历中没有发生任何交换,则说明列表已经有序,排序完成。
算法设计:
- 定义一个布尔变量
flag,初始设为True,用于标记每一轮是否发生了交换。 - 从列表的第一个元素开始,比较相邻的两个元素,如果顺序不对则交换它们的位置。
- 每一轮比较都会将最大(升序)或最小(降序)的元素移动到列表的末尾。
- 如果在一轮比较中没有发生任何交换,则说明列表已经有序,排序完成。
2. 插入排序算法
插入排序是一种逐步构建有序序列的排序算法。它从第二个元素开始,将其视为已排序部分。然后,从已排序部分的最后一个元素开始,与当前元素比较,如果顺序不对则交换它们的位置,直到找到合适的位置插入。继续下一个元素,重复上述步骤,直到所有元素都被插入到正确的位置。
算法设计:
- 从第二个元素开始,将其视为已排序部分。
- 从已排序部分的最后一个元素开始,与当前元素比较,如果顺序不对则交换它们的位置,直到找到合适的位置插入。
- 继续下一个元素,重复上述步骤,直到所有元素都被插入到正确的位置。
3. 代码实现(Python)
# 冒泡排序算法
def bubble_sort(arr, reverse=False):
n = len(arr)
for i in range(n-1):
flag = True
for j in range(n-i-1):
if (arr[j] > arr[j+1] and not reverse) or (arr[j] < arr[j+1] and reverse):
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = False
if flag:
break
return arr
# 插入排序算法
def insertion_sort(arr, reverse=False):
n = len(arr)
for i in range(1, n):
key = arr[i]
j = i - 1
while j >= 0 and ((arr[j] > key and not reverse) or (arr[j] < key and reverse)):
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
4. 使用示例
arr = [5, 3, 8, 2, 1, 7, 6, 4]
ascending = bubble_sort(arr.copy())
descening = bubble_sort(arr.copy(), reverse=True)
print('冒泡排序升序结果:', ascending)
print('冒泡排序降序结果:', descending)
arr = [5, 3, 8, 2, 1, 7, 6, 4]
ascending = insertion_sort(arr.copy())
descening = insertion_sort(arr.copy(), reverse=True)
print('插入排序升序结果:', ascending)
print('插入排序降序结果:', descending)
5. 输出结果
冒泡排序升序结果: [1, 2, 3, 4, 5, 6, 7, 8]
冒泡排序降序结果: [8, 7, 6, 5, 4, 3, 2, 1]
插入排序升序结果: [1, 2, 3, 4, 5, 6, 7, 8]
插入排序降序结果: [8, 7, 6, 5, 4, 3, 2, 1]
以上代码实现了冒泡排序和插入排序两种排序方法,可以根据参数设置实现升序或降序排序。
总结
本文详细介绍了冒泡排序和插入排序两种经典排序算法,并提供了Python代码实现,可以根据参数设置实现升序或降序排序。希望本文能够帮助您更好地理解这两种算法,并在实际问题中运用它们。
原文地址: https://www.cveoy.top/t/topic/pLPd 著作权归作者所有。请勿转载和采集!