zoukankan      html  css  js  c++  java
  • 手写归并排序(MergeSort)

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 
     5 #define N 10000
     6 using namespace std;
     7 
     8 void Merge(int *b,int *a,int i,int m,int n)
     9 {
    10     int s = i;
    11     int j,k;
    12     //归并
    13     for(j=m+1,k=i;i<=m&&j<=n;k++)
    14     {
    15         if(b[i]<b[j])    a[k]=b[i++];
    16         else a[k]=b[j++];
    17     }
    18     while(i<=m)  
    19         a[k++]=b[i++];
    20     while(j<=n)
    21         a[k++]=b[j++];
    22     
    23     for(j=s;j<=n;j++)  //将归并结果再次存入b数组
    24         b[j]=a[j];
    25 }
    26 
    27 void MergeSort(int * b,int *a,int s,int t)
    28 {
    29     if(s==t)    b[s]=a[s];  //初始化b数组
    30     else
    31     {
    32         int mid = (s+t)>>1;
    33         MergeSort(b,a,s,mid);  
    34         MergeSort(b,a,mid+1,t);
    35         Merge(b,a,s,mid,t);  //将b数组[s,mid]与[mid+1,t]归并到a中的[s,t]中
    36     }
    37 }
    38 
    39 int a[N],b[N];
    40 
    41 int main()
    42 {
    43     int n,i;
    44     scanf("%d",&n);
    45     for(i=1;i<=n;i++)
    46     {
    47         scanf("%d",a+i);
    48     }
    49     MergeSort(b,a,1,n);
    50     for(i=1;i<=n;i++)
    51     {
    52         printf("%d ",a[i]);
    53     }
    54     putchar(10);
    55     return 0;
    56 }
  • 相关阅读:
    商人的诀窍
    商人小鑫
    懒虫小鑫
    悼念512汶川大地震遇难同胞
    最少拦截系统
    活动选择问题
    删数问题
    常用排序算法的时间和空间复杂度总结
    一些博主
    C中自己的memcpy
  • 原文地址:https://www.cnblogs.com/crazyapple/p/3242123.html
Copyright © 2011-2022 走看看