归并排序Java:两个有序数组合并,代码跑起来比火箭还快
归并排序属于排序算法, 它会把两个已排好序的数组, 合并成另一个排好序的数组, 其原理为: 先定义一个新数组, 接着定义两个指针, 它们分别指向两个已排好序数组的首个元素, 之后两者开展比较, 把较小的那个数放置到新定义的那个数组的首个位置, 于此同时, 将较小的那个数的下标加1, 再和比自己大的那个数作比较, 两者里头较小的数就放进新数组中, 最终比较完毕后, 要是其中一个数组存在剩余未比较的元素, 就把剩余的元素直接插入到新数组里。听闻起来略微有些绕弯子, 那就还是列举一个实例, 比如说当下有两个排列有序的数组, 便是arr1 {1,3,5,8,12,45,89}以及arr2 {2,4,6,7,9,10,11}, 接着再去定义一个全新的数组arr, 其长度是arr1加上arr2, 借以来 合并之后的那个数组, 然后定义两个指针i和j, 它们分别指向arr1之中的第一个元素以及arr2之中的第一个元素, 也就是1和2, 1比2要小, 那么就把1放置到arr里的第一个位置, 在这个时候arr就变为了, 之后, 移动i唷, 使得i指向3, 接着再去跟j所对应的元素进行比较, 2小于3, 所以就把2放进到arr里头去, arr就演化成了, 再接着移动j唷, 让j加1, 指向4, 再去开展比较……最终, 就达成了两个有序数组合二为一搞成一个有序数组, 这下如何? 是不是很简单下面是Java代码实现class Demo { public static void main(String[] args) { //定义两个整型数组 int[] arr1 {1,3,5,8,12,45,89}; int[] arr2 {2,4,6,7,9,10,11}; //调用归并排序函数赋值给新数组temp int[] temp mergerSort(arr1,arr2); //输出排序后的数组 for(int i0;iout.print(temp[i] ); } } //定义归并排序算法 public static int[] mergerSort(int[] a1,int[] a2) { //left控制a1数组的下标 int left 0; //right控制a2数组的下标 int right 0; //x控制新数组的下标 int x 0; //定义一个新数组arr int[] arr new int[a1.lengtha2.length]; while(left//如果left指向的数小于right指向的数 //就把arr[left]写入到新数组arr中 if(a1[left]//如果right指向的数小于left指向的数 //就把arr[right]写入到新数组arr中 else { arr[x] a2[right]; } } //比较完后若a1数组有剩余将剩余部分写入新数组的后面 while(left//比较完后若a2数组有剩余将剩余部分写入新数组的后面 while(right//返回数组 return arr; } }瞧见这儿, 大伙兴许会讲, 这是将两个数组合并成一个数组, 并且还是把两个有序的数组合并成一个有序的数组, 那倘若我想要拿归并排序去给一个数组排一下序难道就不可以吗? 怎么会不可以, 那还要归并排序干啥用时……存在一个数组的归并排序算法, 实际上跟上面所讲述的这个道理是相同的, 上面是将两个有序的数组合并成为一个有序的数组, 那么你是否也能够把一个无序的数组拆解成多个有序的数组? 这究竟是什么含义? 意思就是讲, 存在一个呈现无序状态的数组, 你将数组里的每一个元素都视作一个仅含有一个元素的数组, 如此一来, 这个视为新数组的数组, 是不是处于有序状态了, 之后, 在两个相邻的数组之间, 实际上在这里就是两个相邻的数, 是不是能够运用我们上面所提及的归并排序算法, 当排序完成之后, 是不是又会再度转变为好几个处于有序状态的数组, 然后, 在相邻的这些数组之间再次运用归并排序, 是不是又会变得有序起来, 一直持续到最后所有的数组都完成合并, 此时整个数组的排序就大功告成了。看出来的或许也有读者们, 这个是得运用递归予以实现的, 首先呢是进行拆分, 把一个数组拆分成一个个单独的元素, 然后再将它们逐个进行归并, 这便是其中的原理了。提个示例, 来看一个数组里的四个数{4,1,2,3}, 首先要把它们逐个拆开, 也就是拆成{4},{1},{2},{3}, 随后, 将它们两个两个进行归并, 这样就变成了{1,4},{2,3}, 接着再次进行两两归并, 于是就变成了{1,2,3,4}, 明白了没? 看上去好像挺简单,可实际上在进行递归操作的时候是需要具备很强的理解能力才行的, 记住, 对于一个数组的归并排序来讲, 总共分为两步, 其一呢是拆分, 其二是合并, 知道了?下面是Java代码实现class Demo { public static void main(String[] args) { //定义一个无序数组 int[] arr {3,1,2,4,5,7,6,8}; //left在这里定义控制左半部分的首元素 int left 0; //right指向最后一个元素 int right arr.length-1; //调用排序函数 sort(arr,left,right); //输出排序后的数组 for(int i0;iout.println(arr[i]); } } public static int[] sort(int[] arr,int left,int right) { //mid其实是作为分割的指针 int mid (leftright)/2; //递归拆分调用归并这里是关键需要读者好好思考 //读者可以用元素少一点的数组先思考明白了再去想递归是什么回事 if(left1,right); merger(arr,left,right,mid); } return arr; } //归并函数 public static void merger(int[] arr,int left,int right,int mid) { //定义一个新数组来存放排序后的数 int[] temp new int[right-left1]; //x控制新数组的下表 int x 0; //j指向右半部分数组的首元素 int j mid1; //将left赋值给l最后覆盖的时候要用到否则left值被改变 int l left; while(leftmid jright) { if(arr[left]else { temp[x] arr[j]; } } //处理剩余数组 while(leftmid) { temp[x] arr[left]; } //处理剩余数组 while(jright) { temp[x] arr[j]; } //覆盖原来的数组 for(int i0;i// } } }AA.ZhAoAnSh.CoMF860.ZhAoAnSh.CoM6CD1.ZhAoAnSh.CoMWWw.ZhAoAnSh.CoM70.ZhAoAnSh.CoMEC76.ZhAoAnSh.CoM644.ZhAoAnSh.CoM6EDC.ZhAoAnSh.CoMBD3.ZhAoAnSh.CoM289.ZhAoAnSh.CoM45C4.ZhAoAnSh.CoM22C4.ZhAoAnSh.CoM412.ZhAoAnSh.CoM031.ZhAoAnSh.CoMF8AC.ZhAoAnSh.CoM055.ZhAoAnSh.CoM1ECE.ZhAoAnSh.CoMA1.ZhAoAnSh.CoM18C5.ZhAoAnSh.CoM4975.ZhAoAnSh.CoM691F.ZhAoAnSh.CoM186E.ZhAoAnSh.CoM675C.ZhAoAnSh.CoM06EE.ZhAoAnSh.CoME882.ZhAoAnSh.CoM2F.ZhAoAnSh.CoMF97.ZhAoAnSh.CoM5BC.ZhAoAnSh.CoM06A.ZhAoAnSh.CoM56.ZhAoAnSh.CoMF1E2.ZhAoAnSh.CoMDF02.ZhAoAnSh.CoM11.ZhAoAnSh.CoMB74.ZhAoAnSh.CoM7BC.ZhAoAnSh.CoM9D56.ZhAoAnSh.CoM49.ZhAoAnSh.CoME15.ZhAoAnSh.CoM9A74.ZhAoAnSh.CoMBBBB.ZhAoAnSh.CoMBD71.ZhAoAnSh.CoM7141.ZhAoAnSh.CoM3FF.ZhAoAnSh.CoM01CC.ZhAoAnSh.CoM94F.ZhAoAnSh.CoM7DB3.ZhAoAnSh.CoMB0B.ZhAoAnSh.CoMAD5.ZhAoAnSh.CoM7F.ZhAoAnSh.CoM1F0A.ZhAoAnSh.CoM0411.ZhAoAnSh.CoM419.ZhAoAnSh.CoM12.ZhAoAnSh.CoM260.ZhAoAnSh.CoM3F3.ZhAoAnSh.CoM61D.ZhAoAnSh.CoM696C.ZhAoAnSh.CoMD42.ZhAoAnSh.CoMB0FD.ZhAoAnSh.CoMCA83.ZhAoAnSh.CoM3C0.ZhAoAnSh.CoM89C6.ZhAoAnSh.CoM3CA.ZhAoAnSh.CoM37.ZhAoAnSh.CoM6D.ZhAoAnSh.CoMAF3.ZhAoAnSh.CoMB9D1.ZhAoAnSh.CoM4BF.ZhAoAnSh.CoM471.ZhAoAnSh.CoMA7C.ZhAoAnSh.CoM82.ZhAoAnSh.CoM0DE.ZhAoAnSh.CoM1909.ZhAoAnSh.CoM9470.ZhAoAnSh.CoMBAF9.ZhAoAnSh.CoM4B14.ZhAoAnSh.CoMC7A.ZhAoAnSh.CoMA04A.ZhAoAnSh.CoMCBD.ZhAoAnSh.CoM2329.ZhAoAnSh.CoM64.ZhAoAnSh.CoMC004.ZhAoAnSh.CoM106.ZhAoAnSh.CoMAF57.ZhAoAnSh.CoMEB.ZhAoAnSh.CoM7838.ZhAoAnSh.CoMA35.ZhAoAnSh.CoM5C5.ZhAoAnSh.CoMCEB.ZhAoAnSh.CoMBF7E.ZhAoAnSh.CoM9452.ZhAoAnSh.CoMC787.ZhAoAnSh.CoMFEB3.ZhAoAnSh.CoMF84.ZhAoAnSh.CoM5F35.ZhAoAnSh.CoMFE08.ZhAoAnSh.CoM0ACA.ZhAoAnSh.CoM0F3.ZhAoAnSh.CoM52D.ZhAoAnSh.CoM0B2.ZhAoAnSh.CoM20C6.ZhAoAnSh.CoMB8.ZhAoAnSh.CoMEAE5.ZhAoAnSh.CoMC80.ZhAoAnSh.CoMC941.ZhAoAnSh.CoM28.ZhAoAnSh.CoM2EF3.ZhAoAnSh.CoMF448.ZhAoAnSh.CoMC4.ZhAoAnSh.CoM2A89.ZhAoAnSh.CoM2B.ZhAoAnSh.CoMD9.ZhAoAnSh.CoM157A.ZhAoAnSh.CoMC82.ZhAoAnSh.CoMBD.ZhAoAnSh.CoMA64.ZhAoAnSh.CoM63A2.ZhAoAnSh.CoMDC.ZhAoAnSh.CoMA131.ZhAoAnSh.CoMB6.ZhAoAnSh.CoM76.ZhAoAnSh.CoM1C2.ZhAoAnSh.CoM86E.ZhAoAnSh.CoM1871.ZhAoAnSh.CoMAEB.ZhAoAnSh.CoM112.ZhAoAnSh.CoM0F5A.ZhAoAnSh.CoM53.ZhAoAnSh.CoM9244.ZhAoAnSh.CoM3C.ZhAoAnSh.CoM7379.ZhAoAnSh.CoMD8F.ZhAoAnSh.CoM22E.ZhAoAnSh.CoM780.ZhAoAnSh.CoM8D7.ZhAoAnSh.CoMAC2.ZhAoAnSh.CoMD23D.ZhAoAnSh.CoM2E.ZhAoAnSh.CoM8DC.ZhAoAnSh.CoMDB0B.ZhAoAnSh.CoM9BD.ZhAoAnSh.CoMED2.ZhAoAnSh.CoM9CC5.ZhAoAnSh.CoM18E9.ZhAoAnSh.CoM7C1.ZhAoAnSh.CoMD7E.ZhAoAnSh.CoME7B.ZhAoAnSh.CoM78A.ZhAoAnSh.CoMAB2.ZhAoAnSh.CoM46.ZhAoAnSh.CoM98B.ZhAoAnSh.CoM781A.ZhAoAnSh.CoM25.ZhAoAnSh.CoM41A8.ZhAoAnSh.CoM3DD6.ZhAoAnSh.CoMF64.ZhAoAnSh.CoMA89.ZhAoAnSh.CoM63.ZhAoAnSh.CoMA01.ZhAoAnSh.CoM6AE9.ZhAoAnSh.CoM962.ZhAoAnSh.CoMD46D.ZhAoAnSh.CoMB332.ZhAoAnSh.CoMB20.ZhAoAnSh.CoM21.ZhAoAnSh.CoM04A.ZhAoAnSh.CoM8CE.ZhAoAnSh.CoM3E.ZhAoAnSh.CoMFEA.ZhAoAnSh.CoM96B.ZhAoAnSh.CoM087.ZhAoAnSh.CoMCD38.ZhAoAnSh.CoM61.ZhAoAnSh.CoM5E.ZhAoAnSh.CoM2051.ZhAoAnSh.CoMC87.ZhAoAnSh.CoMC304.ZhAoAnSh.CoM49E2.ZhAoAnSh.CoM2A9.ZhAoAnSh.CoME5C3.ZhAoAnSh.CoM74C.ZhAoAnSh.CoM807.ZhAoAnSh.CoMEF16.ZhAoAnSh.CoMDE.ZhAoAnSh.CoM26BD.ZhAoAnSh.CoMCA.ZhAoAnSh.CoMF7A1.ZhAoAnSh.CoMB27.ZhAoAnSh.CoMCD6.ZhAoAnSh.CoM352.ZhAoAnSh.CoMC58.ZhAoAnSh.CoME6D7.ZhAoAnSh.CoMDD6F.ZhAoAnSh.CoMFBE.ZhAoAnSh.CoM412A.ZhAoAnSh.CoM2907.ZhAoAnSh.CoMA2A.ZhAoAnSh.CoME0.ZhAoAnSh.CoM16.ZhAoAnSh.CoM0E.ZhAoAnSh.CoM605.ZhAoAnSh.CoM61B.ZhAoAnSh.CoMEBC.ZhAoAnSh.CoM4D1.ZhAoAnSh.CoM5CC4.ZhAoAnSh.CoMBE15.ZhAoAnSh.CoM7731.ZhAoAnSh.CoM7ECA.ZhAoAnSh.CoMF3.ZhAoAnSh.CoMDE6.ZhAoAnSh.CoMD03.ZhAoAnSh.CoM84E.ZhAoAnSh.CoMF06.ZhAoAnSh.CoM8A9.ZhAoAnSh.CoM1F8.ZhAoAnSh.CoME889.ZhAoAnSh.CoMA677.ZhAoAnSh.CoMB3CA.ZhAoAnSh.CoMD4AC.ZhAoAnSh.CoME015.ZhAoAnSh.CoM62.ZhAoAnSh.CoM38F.ZhAoAnSh.CoMC6D.ZhAoAnSh.CoM0363.ZhAoAnSh.CoMBD5D.ZhAoAnSh.CoM06AE.ZhAoAnSh.CoMC3.ZhAoAnSh.CoM0A8E.ZhAoAnSh.CoMB061.ZhAoAnSh.CoM550.ZhAoAnSh.CoM50.ZhAoAnSh.CoM4C38.ZhAoAnSh.CoM7FC.ZhAoAnSh.CoMC0.ZhAoAnSh.CoMA0BB.ZhAoAnSh.CoM47.ZhAoAnSh.CoME78E.ZhAoAnSh.CoM3B8.ZhAoAnSh.CoM4364.ZhAoAnSh.CoME1D.ZhAoAnSh.CoM276.ZhAoAnSh.CoMD830.ZhAoAnSh.CoMF1F.ZhAoAnSh.CoM0F.ZhAoAnSh.CoM18.ZhAoAnSh.CoMDC9.ZhAoAnSh.CoM79.ZhAoAnSh.CoMEEB.ZhAoAnSh.CoMB0.ZhAoAnSh.CoM68FE.ZhAoAnSh.CoM629.ZhAoAnSh.CoMF131.ZhAoAnSh.CoM17E.ZhAoAnSh.CoM11E9.ZhAoAnSh.CoME5.ZhAoAnSh.CoMB014.ZhAoAnSh.CoM01.ZhAoAnSh.CoM584.ZhAoAnSh.CoM2E72.ZhAoAnSh.CoM2A.ZhAoAnSh.CoM966C.ZhAoAnSh.CoM2E7.ZhAoAnSh.CoMA6BD.ZhAoAnSh.CoM00F.ZhAoAnSh.CoM55B0.ZhAoAnSh.CoM9D7E.ZhAoAnSh.CoM254.ZhAoAnSh.CoMBB5A.ZhAoAnSh.CoME7ED.ZhAoAnSh.CoMEFA3.ZhAoAnSh.CoM61C5.ZhAoAnSh.CoMF327.ZhAoAnSh.CoME48B.ZhAoAnSh.CoM7C3.ZhAoAnSh.CoM6B3.ZhAoAnSh.CoMEC5.ZhAoAnSh.CoM93.ZhAoAnSh.CoMDD.ZhAoAnSh.CoM68.ZhAoAnSh.CoM32D.ZhAoAnSh.CoM2EDE.ZhAoAnSh.CoM97.ZhAoAnSh.CoM080.ZhAoAnSh.CoMC5.ZhAoAnSh.CoM90A1.ZhAoAnSh.CoMA9.ZhAoAnSh.CoM5854.ZhAoAnSh.CoMF5.ZhAoAnSh.CoM847.ZhAoAnSh.CoM59B.ZhAoAnSh.CoM670.ZhAoAnSh.CoMFA9.ZhAoAnSh.CoM15.ZhAoAnSh.CoMEF7.ZhAoAnSh.CoM53AB.ZhAoAnSh.CoM57.ZhAoAnSh.CoM6B.ZhAoAnSh.CoM33C0.ZhAoAnSh.CoM960.ZhAoAnSh.CoM117.ZhAoAnSh.CoMEC39.ZhAoAnSh.CoM2D9.ZhAoAnSh.CoM13.ZhAoAnSh.CoM1C5D.ZhAoAnSh.CoM14F3.ZhAoAnSh.CoM3B2.ZhAoAnSh.CoM9EF.ZhAoAnSh.CoM0AC.ZhAoAnSh.CoM05D.ZhAoAnSh.CoMAAD.ZhAoAnSh.CoM4245.ZhAoAnSh.CoM749.ZhAoAnSh.CoM540.ZhAoAnSh.CoMACF7.ZhAoAnSh.CoM