ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## 归并排序 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 <br>将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。 ### 归并排序的分析 ![](https://box.kancloud.cn/a29c0dd0186d1f8cef3c5ebdedf3e5a3_300x180.gif) ### 归并排序的实现 ``` def merge_sort(li): # 如果列表长度小于1,不在继续拆分 if len(li) <= 1: return li # 二分分解 mid_index = len(li) // 2 left = merge_sort(li[:mid_index]) right = merge_sort(li[mid_index:]) # 合并 return merge(left,right) def merge(left, right): '''合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组''' # left与right的下标指针 l_index, r_index = 0, 0 result = [] while l_index < len(left) and r_index < len(right): if left[l_index] < right[r_index]: result.append(left[l_index]) l_index += 1 else: result.append(right[r_index]) r_index += 1 result += left[l_index:] result += right[r_index:] return result alist = [54,26,93,17,77,31,44,55,20] sorted_alist = merge_sort(alist) print(sorted_alist) ```