当前位置: 首页> 教育> 培训 > Python3 第六十课 -- 实例二十九

Python3 第六十课 -- 实例二十九

时间:2025/8/20 14:45:41来源:https://blog.csdn.net/qq_66544550/article/details/140786640 浏览次数:1次

目录

一. 冒泡排序

二. 归并排序


一. 冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

def bubbleSort(arr):n = len(arr)# 遍历所有数组元素for i in range(n):# Last i elements are already in placefor j in range(0, n-i-1):if arr[j] > arr[j+1] :arr[j], arr[j+1] = arr[j+1], arr[j]arr = [64, 34, 25, 12, 22, 11, 90]bubbleSort(arr)print ("排序后的数组:")
for i in range(len(arr)):print ("%d" %arr[i]),

执行以上代码输出结果为:

排序后的数组:
11
12
22
25
34
64
90

二. 归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

分治法:

  • 分割:递归地把当前序列平均分割成两半。
  • 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

def merge(arr, l, m, r): n1 = m - l + 1n2 = r- m # 创建临时数组L = [0] * (n1)R = [0] * (n2)# 拷贝数据到临时数组 arrays L[] 和 R[] for i in range(0 , n1): L[i] = arr[l + i] for j in range(0 , n2): R[j] = arr[m + 1 + j] # 归并临时数组到 arr[l..r] i = 0     # 初始化第一个子数组的索引j = 0     # 初始化第二个子数组的索引k = l     # 初始归并子数组的索引while i < n1 and j < n2 : if L[i] <= R[j]: arr[k] = L[i] i += 1else: arr[k] = R[j] j += 1k += 1# 拷贝 L[] 的保留元素while i < n1: arr[k] = L[i] i += 1k += 1# 拷贝 R[] 的保留元素while j < n2: arr[k] = R[j] j += 1k += 1def mergeSort(arr,l,r): if l < r: m = int((l+(r-1))/2)mergeSort(arr, l, m) mergeSort(arr, m+1, r) merge(arr, l, m, r) arr = [12, 11, 13, 5, 6, 7] 
n = len(arr) 
print ("给定的数组") 
for i in range(n): print ("%d" %arr[i]), mergeSort(arr,0,n-1) 
print ("\n\n排序后的数组") 
for i in range(n): print ("%d" %arr[i]),

执行以上代码输出结果为:

给定的数组
12
11
13
5
6
7排序后的数组
5
6
7
11
12
13
关键字:Python3 第六十课 -- 实例二十九

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: