二路归并排序


二路归并排序_第1张图片
image.png
#include 
using namespace std;
int N=100;
void merge(int a[],int L1,int R1,int L2,int R2){
  int i=L1;
  int j=L2;
  int temp[N],index=0;

  // 因为每个小单元都是由小到达排序的,所以只需比较最低位即可判断temp[index]对应的结果。
  while(i<=R1&&j<=R2){
    if(a[i]<=a[j]){
      temp[index++]=a[i++];
    }
    else{
      temp[index++]=a[j++];
    }
  }

  // 如果i/j中有一个未达到末尾(R1/R2)(实际上只有一个没有)
  // 那就把剩余的已经排好序的数组填充到temp数组后面就好了。
  while(R1>=i){
    temp[index++]=a[i++];
  }
  while(R2>=j){
    temp[index++]=a[j++];
  }
  for(i=0;i

你可能感兴趣的:(二路归并排序)