我的Java开发学习之旅------>Java经典排序算法之归并排序
一、归并排序 归并 排序 是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用。将已有序的子序列合并,得到全然有序的序列。即先使每一个子序列有序。再使子序列段间有序。若将两个有序表合并成一个有序表。称为二路 归并 。 归并过程为:比較a[i]和a[j]的大小。若a[i]≤a[j],则将第一个有序表中的元素a[i]拷贝到r[k]中,并令i和k分别加上1。否则将第二个有序表中的元素a[j]拷贝到r[k]中,并令j和k分别加上1。如此循环下去。直到当中一个有序表取完,然后再将还有一个有序表中剩余的元素拷贝到r中从下标k到下标t的单元。归并排序的算法我们通经常使用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。 二、 归并操作 三、两路归并算法 1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high]。先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完毕后将R1复制回R[low..high]中。 (1)合并过程 合并过程中,设置i,j和p三个指针。其初值分别指向这三个记录区的起始位置。 合并时依次比較R[i]和R[j]的keyword