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

    现在手写排序的同学们越来越少了,但是在一些题目中,利用手写的排序可能会让题目更加的简单。下面我会上传一些排序模板。

    归并排序

    归并操作的工作原理如下:

    第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

    第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

    第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

    重复步骤3直到某一指针超出序列尾

    将另一序列剩下的所有元素直接复制到合并序列尾

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,a[101],b[101]; 
    void y(int l,int r)
    {
        int m,i,j,k;
        if (l==r)
            return;
        m=(l+r)/2;
        y(l,m);
        y(m+1,r);
        i=l;
        j=m+1;
        k=l;
        while (i<=m&&j<=r)
        {
            if (a[i]<=a[j])
            {
                b[k]=a[i];
                k++;
                i++;
            }
            else
            {
                b[k]=a[j];
                k++;
                j++;
            }
        }
        while (i<=m)
        {
            b[k]=a[i];
            k++;
            i++;
        }
        while (j<=r)
        {
            b[k]=a[j];
            k++;
            j++;
        }
        for (int i=l;i<=r;i++)
            a[i]=b[i];
        return;
    }
    int main()
    {
        cin>>n;
        for (int i=1;i<=n;i++)
            cin>>a[i];
        y(1,n);
        for (int i=1;i<=n;i++)
            cout<<a[i]<<" ";
        return 0;
    }

    作者:暄妍

    我的博客:http://www.cnblogs.com/zbyrainbow/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    自定义样式滚动条
    html文本超出加省略号
    getcomputedstyle和style的区别
    模块化设计
    js数组取出非重复元素
    vue 获取元素高度
    js 滚动条滑动
    swiper基本使用
    flex弹性盒子布局
    js 地区三级联动 2
  • 原文地址:https://www.cnblogs.com/zbyrainbow/p/8477587.html
Copyright © 2011-2022 走看看