合并排序分治算法,利用分治算法写出合并排序的算法
00-1010 1.分治算法的基本思想是什么?2.分治算法的体现?3.代码实现
目录
00-1010分而治之法字面意思是“分而治之”,就是把一个复杂的1问题分成两个或两个以上相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单直接地解决。原问题的解是子问题的解的组合。这种思想是许多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)
00-1010分而治之法的基本思想:把一个很难直接解决的大问题,分成一些同样大小的更小的问题,从而一个一个的分而治之。
1.什么是分治算法
00-1010 merge-sort是利用归并的思想实现的一种排序方法。该算法采用经典的分治策略(分治法将问题分成一些小问题然后递归求解,而分治阶段将不同阶段得到的答案“修复”在一起,即分治。
00-1010流程图(以排序数组[8,4,5,7,1,3,6,2]为例)
我们再来看治理阶段。我们需要将两个有序子序列合并成一个有序序列,比如上图中的最后一次合并。到
两个有序子序列[4,5,7,8]和[1,2,3,6]被合并成最终序列[1,2,3,4,5,6,7,8]。我们来看看实现步骤。
分治法
包裹分类;导入Java . util . arrays;/* * *归并排序:* *利用归并的思想实现的一种排序方法。该算法采用了经典的分治策略(将问题分治成一些小问题然后递归求解,在征服阶段* *将不同阶段得到的答案‘拼凑’在一起,即分治)。* @作者联想* */public class merge sort { public static void main(String[]args){ int[]a={ 5,8,6,3,9,8,7,1,4,21,-8,46 };int[]temp=new int[a . length];mergeSort(a,0,a.length-1,temp);system . out . println(arrays . tostring(a));} public static void merge sort(int[]arr,int left,int right,int[]temp){ if(left right){ int mid=(left right)/2;mergeSort(arr,left,mid,temp);mergeSort(arr,mid 1,right,temp);merge(arr,left,mid,right,temp);} } public static void merge(int[]arr,int left,int mid,int right,int[]temp){ int l=left;//左序列的起始位置int r=mid 1;//右序列的起始位置int t=0;//中间数组当前元素的下标while(l=mid r=right) {//如果左侧或右侧没有结束//如果另一侧较小,则将另一个元素放入临时数组If(arr[l]=arr[r]){ temp[t]=arr[l];} else { temp[t]=arr[r];} }//当循环结束时,表示已经遍历了一边。将另一边剩余的元素放入临时数组} }//while(l=mid){ temp[t]=arr[l];} while(r=right){ temp[t]=arr[r];}//将临时数组中的有序序列复制到原数组t=0中;int templeft=leftwhile(templeft=right){ arr[templeft]=temp[t];}}}就这样。本文详细介绍了如何用分治算法实现合并和排序。有关Java中合并和排序的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。