当前位置:网站首页>C语言一维数组练习——将m个元素移动到数组尾部
C语言一维数组练习——将m个元素移动到数组尾部
2022-08-02 14:02:00 【iccoke】
将m个元素放到数组尾部
这里我们的思路是将数组的前m个元素存储到另一个数组后然后再将剩余元素往前移动m位,然后再将存储的元素加到数组的尾部即可
具体代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>
void moveelement(int *arr,int *brr,int m,int len) {
int i = 0; int j = 0;
int k = 0;
assert(m < len);
for ( i = 0; i < m; i++) {
brr[i] = arr[i];
}
for ( j = m; j < len; j++) {
arr[j - m] = arr[j];
}
for (int n = len - m; n < len; n++) {
arr[n] = brr[k];
k++;
}
return;
}
int main() {
int arr[] = { 1,2,3,4,5,6 };
int brr[10];
int m = 2;
int len = sizeof(arr) / sizeof(arr[0]);
moveelement(arr, brr, m, len);
for (int w = 0; w < len; w++) {
printf("% d", arr[w]);
}
}
将前两个元素移动到尾部
但是这个代码开辟了新的内存空间,所以这个代码的空间复杂度又比较大,因此我们需要进行优化
我们可以采取另外一种思路
关于时间复杂度和空间复杂度
算法的时间复杂度与空间复杂度_iccoke的博客-CSDN博客
将整个数组扭转,再根据要求再扭转
例如
将 1,2,3,4,5,6的前2位移动到尾部
先全部扭转,结果为
6,5,4,3,2,1
再分别扭转前四个和后两个即可
扭转前四个结果为
3,4,5,6,2,1
最后扭转后两位结果为
3,4,5,6,1,2
这样就以一种比较低的空间复杂度完成了我们的目的
具体代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>
void Reverse(int* arr, int begin, int end) {
assert(arr != NULL && end >= begin);
int temp;
int n = (end - begin + 1) / 2;
for (int i = 0; i < n; i++,begin++,end--) {
temp=arr[end];
arr[end] = arr[begin];
arr[begin] = temp;
}
}
void moveelement(int* arr, int len, int m) {
assert(arr != NULL);
Reverse(arr, 0, len - 1);
Reverse(arr, 0, len - m - 1);
Reverse(arr, len - m, len - 1);
}
int main() {
int arr[] = { 1,2,3,4,5,6 };
int len = sizeof(arr) / sizeof(arr[0]);
moveelement(arr, len, 2);
for (int i = 0; i < len ; i++) {
printf("%5d", arr[i]);
}
return 0;
}
结果如下
边栏推荐
- The most complete ever!A collection of 47 common terms of "digital transformation", read it in seconds~
- Deep learning framework pytorch rapid development and actual combat chapter3
- verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)
- [ROS]ROS常用工具介绍(待续)
- 跑yolov5又出啥问题了(1)p,r,map全部为0
- Linux:CentOS 7 安装MySQL5.7
- Linux: CentOS 7 install MySQL5.7
- 深度学习框架pytorch快速开发与实战chapter4
- Unit 5 Hold Status
- STM32 (F407) - stack
猜你喜欢
随机推荐
Tornado框架路由系统介绍及(IOloop.current().start())启动源码分析
[ROS] Introduction to common tools in ROS (to be continued)
浅浅写一下PPOCRLabel的使用及体验
MarkDown语法汇总
run yolov5
云GPU(恒源云)训练的具体操作流程
第十五单元 分页、过滤
Flask-SQLAlchemy
yolov5,yolov4,yolov3 mess
php开源的客服系统_在线客服源码php
Unit 12 associated serialization
【Camera2】由Camera2 特性想到的有关MED(多场景设备互动)的场景Idea
【ROS】编译软件包packages遇到进度缓慢或卡死,使用swap
8580 合并链表
【ROS】工控机的软件包不编译
Hands-on OCR (1)
drf源码分析与全局捕获异常
chapter7
云片网案例
Unit 14 Viewsets and Routing