当前位置: 首页 > 后端技术 > Java

简单的合并排序(一)

时间:2023-04-01 19:40:04 Java

大家好,我是小张。最近整理资料,发现合并排序的思想不仅可以应用到排序上,在其他一些场景下也有奇效。小张想用三篇文章让大家了解这几种场景并掌握,那么小张就带大家回顾一下什么是归并排序。说到归并排序,它的思路就是不断的把数据对半切,然后把对半切的数据合并成一个有序的过程。Mergemergemergemerge那么这个merge到底指的是什么呢?假设现在给你一个由两部分组成的有序数组(如下图所示),你需要将这两个有序数组合并成另一个有序数组。我们很容易想到,我们初始化一个和数组大小一样的辅助数组,设置左中右三个指针,比较左指针当前的个数和mid+1指针,小的放指针移动一个后进入辅助数组。那么循环的终止条件就是左指针超过mid指针或者mid+1指针超过右指针。循环这个过程,我们会发现有一半的数据会先进入辅助数组,实例的数据,右边的数据都会进入辅助数组,循环终止。一半的数据呢?我们可以通过left是否小于等于mid或者mid+1指针是否小于等于right来判断数据是否已经完全进入辅助数据。如果发生了,我们只需要将所有数据添加到辅助数据中即可。代码实现publicvoidmerge(int[]data,intl,intmid,intr){int[]help=newint[r-l+1];intindex1=l;intindex2=中间+1;诠释我=0;while(index1<=mid&&index2<=r){help[i++]=data[index1]<=data[index2]?数据[索引1++]:数据[索引2++];}//就在边界之外while(index1<=mid){help[i++]=data[index1++];}//离开边界while(index2<=r){help[i++]=data[index2++];}for(intj=0;j