zoukankan      html  css  js  c++  java
  • 归并排序

    将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(有序表),这种操作称为归并操作。这样的方法经常用于多个有序的数据文件归并成一个有序的数据文件。若将两个有序表合并成一个有序表则称为二路归并,同理,有三路归并、四路归并等。二路归并比较简单,所以我们只讨论二路归并。例如有两个有序表: (7,10,13,15)和(4,8,19,20),归并后得到的有序表为: (4,7,8,10,13,15,19,20)。
            归并过程为:比较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的单元.
     
     1 #include<iostream>
     2 using namespace std;
     3 int a[10001],r[10001],n,i;        //a是待排序数组,r是临时数组
     4 void mergesort(int s,int t)     //对[s,t]区间的无序数据进行归并排序
     5 {    
     6     int m,i,j,k;
     7     if(s==t)  
     8     return;             //若区间只有一个数据就不用排了
     9     m=(s+t)/2;                    //取区间的中点
    10     mergesort(s,m);            //以中点二分,对左边了区间进行排序
    11     mergesort(m+1,t);              //以中点二分,对右边了区间进行排序
    12     i=s;                     //以下是一次归并(合并)操作 
    13     j=m+1;
    14     k=s;
    15     while(i<=m&&j<=t)   //二个子序列从小大到合并,直到有一列结束
    16     {  
    17         if(a[i]<=a[j])   
    18         {r[k]=a[i];
    19         i++;k++;
    20         }
    21         else
    22         {
    23         r[k]=a[j];
    24         j++;k++;
    25         }
    26     }
    27     while(i<=m)//*把左边子序列剩余的元素接入进来*
    28     {
    29         r[k]=a[i];
    30         i++;
    31         k++;
    32     }
    33     while (j<=t)             //把右边子序列剩余的元素接入进来
    34     {
    35         r[k]=a[j];
    36         j++;
    37         k++; 
    38     }
    39     for(i=s;i<=t;i++)            //把合并后的有序数据重新放回a数组
    40     a[i]=r[i];
    41 }
    42 int main()
    43 {  
    44     cin>>n;
    45     for(i=1;i<=n ;i++)                   //读入n个待排序数据
    46     cin>>a[i];
    47     mergesort(1,n);        //对[1,n]区间的无序数据进行归并排序
    48     for (i=1;i<=n;i++)                   //输出n个有序的数据
    49     cout<<a[i]<<" " ;
    50     cout<<endl;
    51 }
     
  • 相关阅读:
    FineUIPro v5.1.0 发布了!
    FineUI十周年纪念版即将发布(基于像素的响应式布局,独此一家)!
    FineUIPro/Mvc/Core/JS v4.2.0 发布了(老牌ASP.NET控件库,WebForms,ASP.NET MVC,Core,JavaScript)!
    选择IT公司的雇主提问
    项目管理趋势
    突发事件下的项目管理
    12-Factor与微服务
    CQRS(Command and Query Responsibility Segregation)与EventSources实例
    阅读理解力的四个层次
    2018年Code Review状态报告
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6582524.html
Copyright © 2011-2022 走看看