深圳网站建设哪家比较专业,自媒体平台哪家好,网站建设职位要求,商业网点建设开发中心网站文章目录 #x1f412;个人主页#x1f3c5;算法思维框架#x1f4d6;前言#xff1a; #x1f380;归并排序 时间复杂度O(n*logn)#x1f387;1. 算法步骤思想#x1f387;2、动画演示#x1f387;3.代码实现 #x1f412;个人主页 #x1f3c5;算法思维框架 #… 文章目录 个人主页算法思维框架前言 归并排序 时间复杂度O(n*logn)1. 算法步骤思想2、动画演示3.代码实现 个人主页 算法思维框架 前言
本篇博客主要以介绍十大排序算法中的归并排序有详细的图解、动画演示、良好的代码注释帮助加深对这些算法的理解进行查漏补缺~
归并排序 时间复杂度O(n*logn)
归并排序Merge sort 是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and Conquer的一个非常典型的应用。
1. 算法步骤思想 申请空间使其大小为两个已经排序序列之和该空间用来存放合并后的序列设定两个指针最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素选择相对小的元素放入到合并空间并移动指针到下一位置重复步骤 3 直到某一指针达到序列尾将另一序列剩下的所有元素直接复制到合并序列尾。 2、动画演示 3.代码实现 private int[] temp;//帮助两个区间排序public void sort(int[] arr){if(arrnull||arr.length2){return;}//思路将数组分为左右区间分别进行排序后使用merge()融合tempnew int[arr.length];//创建一个辅助数组来帮助各区间排序sortDG(arr,0,arr.length-1);}private void sortDG(int[] arr,int left,int right){if(leftright){return;}int midleft(right-left)/2;sortDG(arr,0,mid);sortDG(arr,mid1,right);//后序位置,进行两个已经排好序的数组的融合操作merge(arr,left,mid,right);}private void merge(int[] arr,int left,int mid,int right){for (int i left; i right ; i) {//先把原数组arr[]中待排序区间【left,right】寄存在temp[]对应区间内temp[i]arr[i];}//使用双索引将temp[]寄存区间的值进行排序后回填到arr[]的【left,right】区间内int indexleft;int ileft;int jmid1;while (indexright){if(imid){arr[index]temp[j];}else if(jright){arr[index]temp[i];}else if(arr[i]arr[j]){arr[index]temp[i];}else if(arr[i]arr[j]){arr[index]temp[j];}}}