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

    基本思想

    分而治之

    可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。

    合并相邻有序子序列

    再来看看阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。

    代码实现

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 int a[500005],b[500005];//b 为排完序的数组 
     6 long long ans;
     7 void mergesort(int l,int r)
     8 {
     9     if(l==r)
    10     return;
    11     int mid=(l+r)>>1;
    12     mergesort(l,mid);
    13     mergesort(mid+1,r);
    14     int i=l,j=mid+1,k=l;
    15     while(i<=mid&&j<=r)
    16     {
    17         if(a[i]<=a[j])
    18         b[k++]=a[i++];
    19         else b[k++]=a[j++];
    20     }
    21     while(i<=mid) b[k++]=a[i++];
    22     while(j<=r) b[k++]=a[j++];
    23     for(int q=l;q<=r;q++) a[q]=b[q];
    24 }
    25 int main()
    26 {
    27     int n;
    28     scanf("%d",&n);
    29     for(int i=1;i<=n;i++)
    30         scanf("%d",&a[i]);
    31     mergesort(1,n);
    32     for(int i=1;i<=n;i++)
    33     printf("%d ",b[i]);
    34     return 0;
    35 }
  • 相关阅读:
    Django 07模型层—单表操作(增删改查)
    Django 05(模板-变量、过滤器、 标签 )
    Django 04(url与views相关内容)
    路由基础及反向解析
    Django项目基础
    Django框架导读
    异常处理
    Docker
    Docker基本概念
    Docker架构
  • 原文地址:https://www.cnblogs.com/-Wind-/p/10505558.html
Copyright © 2011-2022 走看看