zoukankan      html  css  js  c++  java
  • 算法和数据结构排序归并排序

    归并算法

    将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n]。

     void Merge(RedType SR[],RedType TR[],int i,int m,int n)
     { /* 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n]  */
       int j,k,l;
       for(j=m+1,k=i;i<=m&&j<=n;++k) /* 将SR中记录由小到大地并入TR */
         if LQ(SR[i].key,SR[j].key)
           TR[k]=SR[i++];
         else
           TR[k]=SR[j++];
       if(i<=m)
         for(l=0;l<=m-i;l++)
           TR[k+l]=SR[i+l]; /* 将剩余的SR[i..m]复制到TR */
       if(j<=n)
         for(l=0;l<=n-j;l++)
           TR[k+l]=SR[j+l]; /* 将剩余的SR[j..n]复制到TR */
     }
    

     将SR[s..t]归并排序为TR1[s..t]。

    void MSort(RedType SR[],RedType TR1[],int s, int t)
     { /* 将SR[s..t]归并排序为TR1[s..t]。*/
       int m;
       RedType TR2[MAXSIZE+1];
       if(s==t)
         TR1[s]=SR[s];
       else
       {
         m=(s+t)/2; /* 将SR[s..t]平分为SR[s..m]和SR[m+1..t] */
         MSort(SR,TR2,s,m); /* 递归地将SR[s..m]归并为有序的TR2[s..m] */
         MSort(SR,TR2,m+1,t); /* 递归地将SR[m+1..t]归并为有序的TR2[m+1..t] */
         Merge(TR2,TR1,s,m,t); /* 将TR2[s..m]和TR2[m+1..t]归并到TR1[s..t] */
       }
     }
    

     对顺序表L作归并排序。

     void MergeSort(SqList *L)
     { /* 对顺序表L作归并排序。 */
       MSort((*L).r,(*L).r,1,(*L).length);
     }
    

     C++可执行代码:

    #include<iostream>
    using namespace std;
    void merge(int a[],int b[],int low,int m,int high)
    {
    	int i=low,j=m+1;
    	int k=low;
    	for(;i<=m&&j<=high;)
    	{
    		if(a[i]<=a[j])
    		{
    			b[k]=a[i];
    			k++;i++;
    		}
    		else
    		{
    			b[k]=a[j];
    			k++;
    			j++;
    		}
    	}
    	if(i<=m)
    	{
    		for(int l=0;l<=m-i;l++)
    			b[k++]=a[i+l];
    	}
    	if(j<=high)
    	{
    		for(int l=0;l<=high-j;l++)
    			b[k++]=a[j+l];
    	}
         // 此处错误, 需要将B拷入A
    } void mergesort(int a[],int b[],int low,int high) { if(low==high) b[low]=a[low]; else { int m=(low+high)/2; mergesort(a,b,low,m); mergesort(a,b,m+1,high); merge(a,b,low,m,high); } } int main() { int a[20];int b[20]; int n; while(cin>>n) { for(int i=0;i<n;i++) cin>>a[i]; mergesort(a,b,0,n-1); for(int i=0;i<n;i++) cout<<b[i]<<' '; cout<<endl; } return 0; }
  • 相关阅读:
    汉诺塔学习笔记,有不正确的地方请小伙伴们指正~·~
    梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编写一个程序,计算共有多少中不同的走法?
    HTTP Status 500
    java基础知识
    JAVA多线程和并发基础面试问答
    thymeleaf中的th:remove用法
    thymeleaf:局部变量 th:with
    springboot: thymeleaf 使用详解
    eclipse修改工作目录颜色
    The user specified as a definer ('root'@'%') does not exist
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2599134.html
Copyright © 2011-2022 走看看