当前位置: 首页 > article >正文

8645 归并排序(非递归算法)

SCAU数据结构OJ第六章

文章目录

  • 8645 归并排序(非递归算法)


8645 归并排序(非递归算法)

Description
用函数实现归并排序(非递归算法),并输出每趟排序的结果
输入格式
第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式
每行输出每趟排序的结果,数据之间用一个空格分隔

输入样例
10
5 4 8 0 9 3 2 6 7 1

输出样例
4 5 0 8 3 9 2 6 1 7
0 4 5 8 2 3 6 9 1 7
0 2 3 4 5 6 8 9 1 7
0 1 2 3 4 5 6 7 8 9

代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int M=1e5+5;
int a[M],n;

void Print()
{
    for(int i=1;i<=n;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
void MergeSort(int num[],int l,int mid,int r)
{
    int *tmp=new int[r-l];//临时数组
    int i=l,j=mid,k=0;
    while(i<mid && j<r)
    {
        if(num[i]>num[j])
        {
            tmp[k++]=num[j++];
            continue;
        }
        tmp[k++]=num[i++];
    }//可能有左或者右子序列为空了,所以有下面的while
    while(i<mid)
    {
        tmp[k++]=num[i++];
    }
    while(j<r)
    {
        tmp[k++]=num[j++];
    }
    for(int i=0;i<k;i++)//最后把临时数组的数据搬回原数组
    {
        num[l++]=tmp[i];
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }

    int width = 1;
    while (width < n)
    {
        for(int start = 1; start <= n; start += width*2)
        {
            int mid = start + width;
            int end = start + 2*width;
            if(mid > n)
            {
                mid = n + 1;
            }
            if(end > n)
            {
                end = n + 1;
            }
            MergeSort(a, start, mid, end);
        }
        Print();
        width *= 2;
    }

    return 0;
}


http://www.kler.cn/a/528588.html

相关文章:

  • 低代码系统-产品架构案例介绍、轻流(九)
  • Java 泛型<? extends Object>
  • HTML(快速入门)
  • three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)
  • 基于排队理论的物联网发布/订阅通信系统建模与优化
  • Day28(补)-【AI思考】-AI会不会考虑自己的需求?
  • 工业相机如何获得更好的图像色彩
  • 常见数据丢失问题类型及解决方案
  • 前端 | 深入理解Promise
  • 蓝桥杯备赛经验帖
  • 图书管理系统 Axios 源码 __删除图书功能
  • Linux命令(144)之diff
  • [CVPR 2022]Cross-view Transformers for real-time Map-view Semantic Segmentation
  • Spring Boot项目如何使用MyBatis实现分页查询
  • 90,【6】攻防世界 WEB Web_php_unserialize
  • python-leetcode-完全二叉树的节点个数
  • webrtc协议详细解释
  • 完美还是完成?把握好度,辨证看待
  • 洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解
  • 开发指南093-平台底层技术网站
  • DeepSeek本地部署详细指南
  • 跨域问题解决实践
  • 电路研究9.2.7——合宙Air780EP中嵌入式 TCPIP 相关命令使用方法研究
  • G. XOUR
  • pytorch实现文本摘要
  • [LeetCode]day9 203.移除链表元素