跳转到内容
主菜单
主菜单
移至侧栏
隐藏
规范/协议
协议
算法
JVM
多线程/并发
存储
AI
深度学习
工具箱
最近更改
文章分类
全部文章
WHY42
搜索
搜索
外观
登录
个人工具
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Merge sort”︁的源代码
页面
讨论
大陆简体
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
页面信息
外观
移至侧栏
隐藏
←
Merge sort
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[Image:Merge_sort_animation2.gif|right|frame|对一个随机点的链表进行排序]] 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 =算法描述= #申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 #设定两个指针,最初位置分别为两个已经排序序列的起始位置 #比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 #重复步骤3直到某一指针到达序列尾 #将另一序列剩下的所有元素直接复制到合并序列尾 =示例代码= ==Python== <source lang="python"> def merge_sort(lst): if len(lst) <= 1: return lst def merge(left, right): merged = [] while left and right: merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0)) while left: merged.append(left.pop(0)) while right: merged.append(right.pop(0)) return merged middle = int(len(lst) / 2) left = merge_sort(lst[:middle]) right = merge_sort(lst[middle:]) return merge(left, right) </source> ==Java== <source lang="java"> public static int[] mergeSort(int[] arr){//归并排序 --递归 if(arr.length==1){ return arr; } int half = arr.length/2; int[] arr1 = new int[half]; int[] arr2 = new int[arr.length-half]; System.arraycopy(arr, 0, arr1, 0, arr1.length); System.arraycopy(arr, half, arr2, 0, arr2.length); arr1 = mergeSort(arr1); arr2 = mergeSort(arr2); return mergeSortSub(arr1,arr2); } private static int[] mergeSortSub(int[] arr1,int[] arr2){//归并排序子程序 int[] result = new int[arr1.length+arr2.length]; int i = 0; int j = 0; int k = 0; while(true){ if(arr1[i] < arr2[j]){ result[k] = arr1[i]; if(++i>arr1.length-1){ break; } }else{ result[k] = arr2[j]; if(++j>arr2.length-1){ break; } } k++; } for(;i<arr1.length;i++){ result[++k] = arr1[i]; } for(;j<arr2.length;j++){ result[++k] = arr2[j]; } return result; } </source> [[Category:Algorithm]]
返回
Merge sort
。
搜索
搜索
查看“︁Merge sort”︁的源代码
添加话题