1. 排序算法的概述
排序算法指的是将数据按照一定的规则进行排列的一种算法。
在实际的应用中,排序算法广泛应用于数据检索、数据压缩、数据库系统、计算机网络等方面,在日常的编程工作中,掌握排序算法的实现方法对于程序员的编程能力提高也至关重要。
本文将介绍python3语言实现四种常见的排序算法:冒泡排序、选择排序、插入排序以及快速排序。
2. 冒泡排序
2.1 算法思想
冒泡排序的算法思想是从左到右依次进行两两比较,如果左边的数大于右边的数就交换二者的位置,依此类推,直到最大的数位于最右侧。然后再从左到右进行相邻的两个数的比较,依此类推,直到整个数列完成排序。
2.2 算法实现
下面是冒泡排序的python3实现代码:
def bubble_sort(arr):
# 获取列表的长度
n = len(arr)
# 从头到尾扫描列表
for i in range(n):
# 从头到尾依次比较相邻的两个数,如果前一个数大于后一个数,就交换二者的位置
for j in range(n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
2.3 算法测试
下面我们来对上述的代码进行测试,看看是否正确:
# 测试代码
arr = [5, 7, 3, 8, 4, 2, 1, 6]
print(bubble_sort(arr))
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
从以上输出结果可以看出,冒泡排序的python3实现代码是正确的。
3. 选择排序
3.1 算法思想
选择排序的算法思想是:从头到尾扫描列表,每次找出最小的数字,然后将其放在最前面,再从剩余的数字中找出最小的数,继续放在已排序的数列的末尾,直到整个数列完成排序为止。
3.2 算法实现
下面是选择排序的python3实现代码:
def select_sort(arr):
n = len(arr)
# 从头到尾扫描列表
for i in range(n):
# 定义一个变量用来记录最小的元素的下标
min_idx = i
# 找出剩余部分中最小的元素的下标
for j in range(i + 1, n):
if arr[j] < arr[min_idx]:
min_idx = j
# 将最小的元素放置到已排好序的列表的最后一个元素的后面
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
3.3 算法测试
下面我们来对选择排序的python3实现代码进行测试,看看是否正确:
# 测试代码
arr = [5, 7, 3, 8, 4, 2, 1, 6]
print(select_sort(arr))
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
从以上输出结果可以看出,选择排序的python3实现代码是正确的。
4. 插入排序
4.1 算法思想
插入排序的算法思想是:将一个元素插入到已经排好序的数列中,从而得到一个新的、长度加一的数列。首先,第一个元素默认是已经排好序的,然后,我们从剩余的列表中取一个元素出来,把它插入到已经排好序的数列中,使得插入后的数列依然是有序的。重复以上步骤,直到整个数列完成排序。
4.2 算法实现
下面是插入排序的python3实现代码:
def insert_sort(arr):
n = len(arr)
# 从头到尾扫描列表
for i in range(n):
# 指定一个位置变量
pos = i
while pos > 0 and arr[pos] < arr[pos - 1]:
# 否则,交换两个数的位置
arr[pos], arr[pos - 1] = arr[pos - 1], arr[pos]
pos -= 1
return arr
4.3 算法测试
下面我们来对插入排序的python3实现代码进行测试,看看是否正确:
# 测试代码
arr = [5, 7, 3, 8, 4, 2, 1, 6]
print(insert_sort(arr))
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
从以上输出结果可以看出,插入排序的python3实现代码是正确的。
5. 快速排序
5.1 算法思想
快速排序的算法思想是:选择一个基准值,将列表中比其小的数放在左边,比其大的数放在右边,然后对左右两个子列表分别重复以上步骤,直至剩余的列表全部有序。
5.2 算法实现
下面是快速排序的python3实现代码:
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
# 选取基准值,进行分割
pivot = arr[0]
# 定义两个指针,用来指向列表的首尾元素
left, right = [], []
for i in arr[1:]:
if i < pivot:
left.append(i)
else:
right.append(i)
# 对左右两个列表分别递归进行排序
return quick_sort(left) + [pivot] + quick_sort(right)
5.3 算法测试
下面我们来对快速排序的python3实现代码进行测试,看看是否正确:
# 测试代码
arr = [5, 7, 3, 8, 4, 2, 1, 6]
print(quick_sort(arr))
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
从以上输出结果可以看出,快速排序的python3实现代码是正确的。
6. 总结
本文介绍了python3实现冒泡排序、选择排序、插入排序以及快速排序的算法思想,以及给出了它们的python3实现代码。在实际的应用中,我们可以根据不同的需求选择不同的排序算法。例如,如果需要排序的数据量比较大,我们可以选择快速排序算法,而对于数据量比较小的情况,则可以考虑选择冒泡排序、选择排序、插入排序等算法。