合并排序

来源:互联网 发布:淘宝手机版千牛工作台 编辑:程序博客网 时间:2024/06/07 02:30
//合并排序#include <iostream>       using namespace std;    int a[105],b[105];   void Merge(int c[],int d[],int l,int m,int r);   void MergeSort(int a[],int left,int right);    int main()  {  int n;cin>>n;    for(int i=0; i<n; i++)      {          cin>>a[i];      }      MergeSort(a,0,n-1);      for(int i=0; i<n; i++)      {          cout<<a[i]<<" ";      }      cout<<endl;  }     void Merge(int c[],int  d[],int l,int m,int r)  {  //合并c[l:m]和c[m+1:r]到d[l:r]     int i = l,j = m + 1,k = l;      while((i<=m)&&(j<=r))      {//从左到右依次比较,较小值赋给d[]          if(c[i]<=c[j])          {              d[k++] = c[i++];          }          else          {              d[k++] = c[j++];          }      }        if(i>m)      {  //左侧已赋值完,将右侧剩余部分赋给d[]         for(int q=j; q<=r; q++)          {              d[k++] = c[q];          }         }      else      {  //右侧已赋值完,将左侧剩余部分赋给d[]         for(int q=i; q<=m; q++)          {              d[k++] = c[q];          }      }  }     void MergeSort(int a[],int left,int right)  {      if(left<right)      {          int i = (left + right)/2;          MergeSort(a,left,i);          MergeSort(a,i+1,right);          Merge(a,b,left,i,right);//合并到数组b            //复制回数组a          for(int g=left; g<=right; g++)          {              a[g] = b[g];          }      }  } 

0 0
原创粉丝点击