• 关于归并排序(模板)


    嗯...

    归并排序这个东西,主要用了分治的思想,并且有一点递归的意思...

    详细看代码...

     1 #include<cstdio>
     2 using namespace std;
     3 int n,z[233],y[233];
     4 
     5 void merge_sort(int l,int r)//归并排序,用到了分治的思想,两个参数分别为左端点和右端点 
     6 {
     7     if (l==r) return;//l==r则它是空的 
     8     int m=(l+r)/2;//进行分治,m为它的中点 
     9     merge_sort(l,m);//将从第一个到m再进行归并排序 
    10     merge_sort(m+1,r);//将从m+1个到r再进行归并排序
    11     //注意直到分治成每一块只有一个数据为止,一个类似递归的思想 
    12     int p1=l,p2=m+1;//将第一大块的第一个数定义为p1,第二大块的第一个数定义为p2,相当于指针 
    13     for (int a=l;a<=r;a++)//将所有数据进行循环搜索 
    14     {
    15         if (p1 > m) //如果p1超出了第一块的范围 
    16         {
    17             y[a] = z[p2];//那么就将p2位置的数放入y数组 
    18             p2 ++;//p2指针后移 
    19         }
    20         else if (p2 > r)//如果p2超出了第二块的范围 
    21         {
    22             y[a] = z[p1];//那么就将p1位置的数放入y数组 
    23             p1++;//p1指针后移 
    24         }
    25         else if (z[p1] < z[p2])//如果除了上述情况且p1位置的数比p2位置的数小 
    26         {
    27             y[a] = z[p1];//则将p1位置的数放入y数组 
    28             p1++;//p1指针后移 
    29         }
    30         else//最后一种情况只需要用else即可 
    31         {
    32             y[a] = z[p2];//p2位置的数放入y数组
    33             p2 ++;//p2指针后移 
    34         }
    35     }
    36     for (int a=l;a<=r;a++)
    37         z[a]=y[a];//将z数组更新,将排好序的序列放入z数组 
    38 }
    39 
    40 int main()
    41 {
    42     //主函数进行读入、调用、输出
    43     scanf("%d",&n);
    44     for (int a=1;a<=n;a++)
    45         scanf("%d",&z[a]);
    46     merge_sort(1,n);
    47     for (int a=1;a<=n;a++)
    48         printf("%d
    ",z[a]);
    49 }

    相信能看懂....

  • 相关阅读:
    Java排序算法之归并排序
    Java多线程学习笔记(四)——Thread类中方法介绍
    大数据平台搭建:Hadoop
    np.arrange用法
    Pandas中DateFrame修改列名
    python .loc vs .iloc区别
    The categories of Reinforcement Learning 强化学习分类
    python3.6安装总结
    梯度下降法与牛顿下降法速度的比较
    My SQL 和SQL Server区别
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10363132.html
Copyright © 2020-2023  润新知