当前位置:实例文章 » JAVA Web实例» [文章](笔记)归并排序

(笔记)归并排序

发布人:shili8 发布时间:2025-02-06 19:35 阅读次数:0

**归并排序笔记**

归并排序是一种常见的排序算法,属于分治类算法。它通过递归地将数组分成两个子数组,然后分别对这两个子数组进行排序,最终合并两个有序子数组得到最终结果。

###1. 算法描述归并排序的基本思想是:

* 将一个长度为 n 的数组分成两个长度为 n/2 的子数组。
* 递归地对这两个子数组进行排序。
* 合并两个有序子数组得到最终结果。

###2. 算法步骤1. **分解**: 将一个长度为 n 的数组分成两个长度为 n/2 的子数组。
2. **递归排序**: 递归地对这两个子数组进行排序。
3. **合并**: 合并两个有序子数组得到最终结果。

###3. 归并排序的实现####3.1 归并函数

def merge(left, right):
 """
 合并两个有序列表 Args:
 left (list): 左边的列表 right (list): 右边的列表 Returns:
 list: 合并后的列表 """
 result = []
 while len(left) >0 and len(right) >0:
 if left[0] <= right[0]:
 result.append(left.pop(0))
 else:
 result.append(right.pop(0))
 result.extend(left)
 result.extend(right)
 return result


####3.2 归并排序函数
def merge_sort(arr):
 """
 归并排序 Args:
 arr (list): 需要排序的列表 Returns:
 list: 排序后的列表 """
 # 如果长度为1或0,则直接返回 if len(arr) <=1:
 return arr # 将数组分成两个子数组 mid = len(arr) //2 left = arr[:mid]
 right = arr[mid:]
 # 递归地对这两个子数组进行排序 left = merge_sort(left)
 right = merge_sort(right)
 # 合并两个有序子数组得到最终结果 return merge(left, right)


###4. 示例
arr = [64,34,25,12,22,11,90]
print("原始列表:", arr)
sorted_arr = merge_sort(arr)
print("排序后的列表:", sorted_arr)


输出:

原始列表: [64,34,25,12,22,11,90]
排序后的列表: [11,12,22,25,34,64,90]


###5. 总结归并排序是一种常见的排序算法,属于分治类算法。它通过递归地将数组分成两个子数组,然后分别对这两个子数组进行排序,最终合并两个有序子数组得到最终结果。归并函数和归并排序函数是实现归并排序的关键部分。示例代码展示了如何使用归并排序函数来排序一个列表。

###6. 注释* 归并函数用于合并两个有序列表。
* 归并排序函数用于对一个列表进行排序。
* 递归地将数组分成两个子数组,然后分别对这两个子数组进行排序,最终合并两个有序子数组得到最终结果。

###7. 参考* [Wikipedia: Merge sort]( />* [GeeksforGeeks: Merge Sort](

其他信息

其他资源

Top