数组重排(交叉排序)C++实现

题目:

a1 a2 a3 …… b1 b2 b3 ……

重排成 :

a1 b1 a2 b2 a3 b3 ……

(无升降序,元素可重复)

 

 

// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read (from stdin).

#include <iostream>
using namespace std;

// print array
void print_arr(int a[], int n) {
    for(int i = 0; i < n; i++) cout<<a[i]<<" ";
    cout<<endl;
}

// reverse array 
void reverse(int a[], int l, int h) {
    if(l>=h) return;
    int m = (l+h)/2;
    for(int i = l; i <= m; i++) swap(a[i], a[h-i+l]);
}

// rotate array partially
void rotate(int a[], int l, int m, int h) {
    if(l>=h) return;
    if(l>m) return;
    if(m>h) return;
    reverse(a, l, m-1);
    reverse(a, m, h);
    reverse(a, l, h);
}

// resort array by interval
// div means the start of the second array
void gap_sort(int a[], int n, int div) {
    if(n <= 2) return;
    
    int pre = 0;
    int cur = pre + 1;
    int a_end = div-1;
    
    while(cur != div) cur ++;
    pre ++;

    while(cur <= n-1 && pre <= a_end) {
        swap(a[pre], a[cur]);
        rotate(a, ++pre, cur, cur+1);
        pre += 3;
        cur += 2;
        a_end += 2;
    }
}

int main() {
    int arr[] = {0, 2, 4, 6, 8, 1, 3, 5, 7, 9};
    print_arr(arr, 10);
    gap_sort(arr, 10, 5);
    print_arr(arr, 10);
    return 0;
}

 

 欢迎关注微信公众号——计算机视觉:

数据结构-数组排序-实现不改变正数负数的相对顺序正负交叉输出 数据结构-数组排序-实现不改变正数负数的相对顺序正负交叉输出题目介绍解决问题思路介绍代码实现(C/C++) 题目介绍 输入一组数据例:[2,8,-9,4,7,11,-7,-14],要求输出时正负交叉,同时保持正数(即2,8,4,7,11)和负数(即-2,-7,-14)的相对顺序不变,输出结果为[2,-9,8,-7,4,-14,7,11] 解决问题思路介绍 1、首先判断数组中前两个数是否是正负交... 阅读详情

相关推荐

C++构建工业级推荐系统:高性能架构、核心模块实现与工程化落地

推荐系统作为信息过滤与个性化分发的核心技术,其核心原理是通过算法模型分析用户与物品的特征及交互行为,预测用户偏好并生成个性化列表。在工业级应用中,系统的性能、延迟与吞吐量直接决定了用户体验与商业价值,尤其在处理海量数据与高并发请求的场景下。C++凭借其零成本抽象、对硬件资源的直接掌控及极致运行时效率,成为构建高性能核心组件的关键技术选型。通过精细的内存布局优化、SIMD向量化计算、高效数据结构设计及与底层推理框架(如ONNX Runtime、Faiss)的无缝集成,C++能够实现从特征工程、多路召回到模型推

weixin_34342207的博客 409

C++数组交叉合并

char s1[]="abcdef"; char s2[]="123456"; 把s1[],s2[]交叉放在s3[]中 char s3[13]

EvoSort:遗传算法优化高性能并行排序

排序算法作为计算密集型任务的核心组件,其性能直接影响数据库、科学计算等场景的效率。传统算法如快速排序面临大数据量时性能瓶颈明显,而并行算法虽能利用多核优势,却存在参数配置敏感的痛点。遗传算法(GA)通过模拟自然进化过程,可自动优化算法参数组合,在并行计算领域展现出独特价值。EvoSort框架创新性地将GA与极致优化的并行排序(包括缓存敏感的归并排序和向量化基数排序)相结合,实现了参数自适应的智能排序系统。该技术特别适合十亿级规模数据处理,实测显示其通过自动选择最优算法和参数,能获得相比NumPy等传统方案最

weixin_30770783的博客 449

常见几种排序方式(选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序

常见的几种排序方式,包括选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序。vs2008实现,对话框方式,主要实现字符串的由小到大排序。点击“几种排序方法.vcproj“运行。字符集使用多字节集,不能用UNICODE。

交叉排序

#include<bits/stdc++.h> using namespace std; bool cmp(int a,int b) { return a>b; } bool cmp1(int a,int b) { return a<b; } int main() { int n; int l1,l2,r1,r2; cin&gt...

chen_zan_yu_的博客 307

计蒜客交叉排序

#include&lt;iostream&gt;#include&lt;cstdlib&gt;using namespace std;int main(){    //freopen("1.txt","r",stdin);    //freopen("2.txt","w",stdout);    int a[10000],b[10000];    int n,L1,R1,L2,R2;    cin

杨虎大大的博客 419

[sort排序] 7. 交叉排序(自定义排序、常规解法)

文章目录1. 题目来源2. 题目说明3. 题目解析方法一:sort()+自定义排序+常规解法 1. 题目来源 链接:交叉排序 2. 题目说明 3. 题目解析 方法一:sort()+自定义排序+常规解法 题意很明确,就是一个区间段的排序,注意把握好边界即可。 参见代码如下: #include <iostream> #include <algorithm> using na...

Y-puyu 的博客 559

九种排序算法(C++实现

这里是常用的九种排序算法的C++实现过程,附有详细的代码注释。因为要放假走人了所以具体细节日后再补充。 (以下所有代码均在VS2015与WIN10环境下执行成功) 1. 插入排序 时间复杂度平均O(n2),最好O(n),最差O(n2),空间复杂度O(1),就地、稳定的排序; 思路为:从第一与第二个元素开始,不断考虑后缀的元素,将其插入到前缀中合适其的位置,随着插入,其后的所有位置都需要改变。类...

方寸间沧海桑田的博客 1582

快速排序详细分析--单向扫描和双向扫描

快速排序详细分析 by JOKER on 2009/08/27 快速排序详细分析 注:REF[n]为参考资料,列于文章结尾。 看了编程珠玑Programming Perls第11章关于快速排序的讨论,发现自己长年用库函数,已经忘了快排怎么写。于是整理下思路和资料,把至今所了解的快排的方方面面记录与此。 纲要 算法描述时间复杂度分析具体实现细节 划分 选取枢纽

System Architect 5314

排序算法4 希尔排序

    插入排序速度慢,因为它进行的唯一交换涉及到邻接项,因此,在数组中,项只能一次移动一个位置。例如,如果最小键刚好就在数组的末端,则需要N步将它移到位。希尔排序(Shellsort)是插入排序的简单扩展,它允许离得很远的元素进行交换,所以提高了速度。              希尔排序的思想是,重排文件后让它具有以下性质:每隔h取一个元素(从任意处开始),得到一个有序文件。这种文件称做h-

冬日夜雨 1806

【C/C++每日一练】总目录(2023.2.18~5.18)共90篇

​ 20230517 1. 排序问题🌟 2. 查找小值 🌟 3. 寻找峰值🌟🌟 20230516 1. 买卖股票的最佳时机🌟 2. 两数相加🌟🌟 3. 二叉树的后序遍历🌟 20230515 1. 区间和的个数🌟🌟🌟 2. 二叉搜索树的最近公共祖先🌟 3. 找最接近元素🌟🌟 ​......

汉阳Hann's Home 2095

poj 3067 Japan(树状数组)

题意:东西两岸有N,M座城市 从北到南标号分别为1...N or M 在它们之间建铁路,每个站最多只能有两条铁路 求总的交点数 思路:各连线按x降序(x相同,y降序)重排 再以y 建树状数组 注意有边的情况 比如: 3 1 2 2 1 2 1 2 输出应是 0 还有要用__int64存 //2764K    516MS #include #include #include #defi

539

本地大模型RAG实战:node-llama-cpp与内存检索集成指南

检索增强生成(RAG)技术通过结合外部知识库,有效解决了大语言模型(LLM)上下文窗口有限的问题,显著提升了模型在专业问答、文档分析等场景下的准确性和实用性。其核心原理是将用户查询与知识库文档进行语义匹配,检索出最相关的信息片段,并整合到提示词中供模型生成最终答案。这一技术价值在于,它无需新训练模型,就能让通用大模型快速获得特定领域的专业知识。在工程实践中,轻量级、低延迟的本地部署方案备受关注。本文聚焦于**node-llama-cpp**与**OpenClaw**(内存检索)的集成,深入探讨了如何在不依

weixin_33853827的博客 607

笔试算法题(54):快速排序实现之单向扫描、双向扫描(single-direction scanning, bidirectional scanning of Quick Sort)...

议题:快速排序实现之一(单向遍历) 分析: 算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分递归调用QuickSort;另一部分是partition,选取划分元素P(随机选取数组中的一个元素,交换到数组末尾位置),定义两个标记 值left和right,随着划分的进行,这两个标记值...

weixin_34177064的博客 615

快速排序算法深度解析:从核心原理到工业级实现优化

排序算法是计算机科学的基础,其核心目标是将数据元素按特定顺序排列,以提高数据检索和处理效率。基于分治策略的排序算法通过将大问题分解为小问题来提升性能,其中原地排序算法因其节省内存的特性而备受青睐。快速排序作为分治与原地排序的典范,其技术价值在于平均O(n log n)的高效时间复杂度,使其成为处理大规模数据的首选。该算法通过巧妙的分区操作和基准值选择,广泛应用于数据库索引、编程语言标准库及大数据处理等场景。本文深入探讨了快速排序的分区实现、递归优化及应对复元素的策略,并提供了包含随机化基准和三路分区等

weixin_30435261的博客 477

快速排序与桶排序:核心原理、实战优化与场景选择指南

排序算法是数据处理的基础,其核心目标是将数据集合按特定顺序高效排列。基于比较的排序算法,如快速排序,遵循分治策略,通过递归划分和排序子序列实现,平均时间复杂度可达O(n log n),在随机数据上表现出色。而非比较排序算法,如桶排序,则利用数据分布特性,通过将元素分散到多个桶中并分别排序,在数据均匀分布时可达线性时间复杂度,体现了以空间换时间的工程权衡。理解算法原理有助于进行性能调优,例如通过优化快速排序的枢纽选择策略避免最坏情况,或根据数据特征设计桶排序的映射函数。这些技术在高性能计算、大数据分析和内存敏

weixin_30684743的博客 771

CrackingtheCodeInterview之数组与字符串

//NO.1 //实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理? 初步想法:将字符串排序,然后比较相邻元素是否相同。 较好思路:1、字符串分为ASCII和Unicode两种,ASCII码共256种,Unicode码共65536种,可以定义bool型数组,并初始化为false,遍历字符串,每次将字符对应的bool型变量改为true,每次更改

Alex123980的博客 384
上一篇: 无监督学习特征--稀疏编码、深度学习、ICA部分代表文献
下一篇: 神经网络(Neural Network)的表示
Vinson
博客等级 码龄17年 38粉丝 296原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值