下面是关于“基于Python的七种经典排序算法”的完整攻略。
1. 排序算法简介
排序算法是一种将一组数据按照特定顺序排列的算法。在计算机科学中,常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序等。
2. Python实现七种经典排序算法
2.1泡排序
冒泡排序是一种通过交换相邻元素来排序的算法。在Python中,我们可以使用以下代码实现冒泡排序:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
在这个代码中,我们使用两个嵌套的环来实现冒泡排序外层循环用于遍历整个数组,内层循环用于比较相邻元素并交换它们的位置。最后,我们返回后的数组。
下面是一个使用冒泡排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(arr))
在这个示例中,我们使用 bubble_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的结果。
2.2 快速排序
快速排序是一种通过分治法来排序的算法。在Python中,我们可以使用以下代码实现快速排序:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = []
right = []
for i in range(1, len(arr)):
if arr[i] < pivot:
left.append(arr[i])
else:
right.append(arr[i])
return quick_sort(left) + [pivot] + quick_sort(right)
在这个代码中,我们使用递归来实快速排序。我们首先选择一个基准元素 pivot
,然后将数组分成两个部分,一部分包含小于 pivot
的元素,另一部分包含大于等于 pivot
的元素。最后,我们递归地对左右两个部分进行排序,并将它们和 pivot
组合在一起返回。
下面是一个使用快速排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(quick_sort(arr))
在这个示例中,我们使用 quick_sort()
函数对数组 [64, 34, 25, 12, 22, 11 90]
进行排序,并打印排序后的结果。
2.3 选择排序
选择排序是一种通过选择最小元素来排序的算法。在Python中,我们可以使用以下代码实现选择排序:
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
在这个代码中,我们使用两个嵌套的循环来实现选择排序。外层循环用于遍历整个数组,内层循环用于选择最小元素并将其放在正确的位置上。最后,我们返回排序后的数组。
下面是一个使用选择排序的示例:
arr = [64, 34, , 12, 22, 11, 90]
print(selection_sort(arr))
在这个示例中,我们使用 selection_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的。
2.4 插入排序
插入排序是一种通过将元素插入已排序的数组中来排序的算法。在Python中,我们可以使用以下代码实现插入排序:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
在这个代码中,我们使用一个循环来实现插入排序。我们首先将第一个元素视为已排序的数组,然后将后续元素插入到已排序的数组中。最后,我们返回排序后的数组。
下面是一个使用插入排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(insertion_sort(arr))
在这个示例中,我们使用 insertion_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的结果。
2.5 希尔排序
希尔排序是一种通过分组插入排序来排序的算法。在Python中,我们可以使用以下代码实现希尔排序:
def shell_sort(arr):
n = len(arr)
gap = n // 2
while gap > 0:
for i in range(gap, n):
temp = arr[i]
j = i
while j >= gap and arr[j-gap] > temp:
arr[j] = arr[j-gap]
j -= gap
arr[j] = temp
gap //= 2
return arr
在这个代码中,我们使用一个循环来实现希尔排序。我们首先将数组分成若干个子数组,然后对每个子数组进行插入排序。最后,我们逐步缩小子数组的大小,直到子数组大小为1,完成排序。
下面是一个使用希尔排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(shell_sort(arr))
在这个示例中,我们使用 shell_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的结果。
2.6 归并排序
归并排序是一种通过分治法来排序的算法。在Python中,我们可以使用以下代码实现归并排序:
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
merge_sort(left)
merge_sort(right)
i = j = k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
arr[k] = left[i]
i += 1
else:
arr[k] = right[j]
j += 1
k += 1
while i < len(left):
arr[k] = left[i]
i += 1
k += 1
while j < len(right):
arr[k] = right[j]
j += 1
k += 1
return arr
在这个代码中,我们使用递归来实现归并排序。我们首先将数组分成两个部分,然后递归地对左右两个部分进行排序。最后,我们将左右两个部分合并起来,并返回排序后的数组。
下面是一个使用归并排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(merge_sort(arr))
在这个示例中,我们使用 merge_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的结果。
2.7 堆排序
堆排序是一种通过堆数据结构来排序的算法。在Python中,我们可以使用以下代码实现堆排序:
def heapify(arr, n, i):
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and arr[i] < arr[l]:
largest = l
if r < n and arr[largest] < arr[r]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def heap_sort(arr):
n = len(arr)
for i in range(n//2-1, -1, -1):
heapify(arr, n, i)
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
在这个代码中,我们使用堆数据结构来实现堆排序。我们首先将数组转换成一个最大堆,然后将堆顶元素与最后一个元素交换,然后重新构建最大堆。最后,我们返回排序后的数组。
下面是一个使用堆排序的示例:
arr = [64, 34, 25, 12, 22, 11, 90]
print(heap_sort(arr))
在这个示例中,我们使用 heap_sort()
函数对数组 [64, 34, 25, 12, 22, 11, 90]
进行排序,并打印排序后的结果。
3. 总结
排序算法是一种将一组数据按照特定顺序排列的算法。在Python中,常见的算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序等。在实现这些算法时,我们使用相应的代码来比较和交换元素、递归地分治数组等。最后,我们可以返回排序后的数组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python的七种经典排序算法(推荐) - Python技术站