当前位置:网站首页>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;
}结果如下

边栏推荐
猜你喜欢

宏定义问题记录day2

第十三单元 混入视图基类
ROS通信 —— 节点,Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS](05)ROS通信 —— 节点,Nodes & Master

verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)
创建&编译ROS软件包Package](/img/c2/5931d5cbade509c6ca34d66a274756.png)
[ROS](02)创建&编译ROS软件包Package

(ROS) (03) CMakeLists. TXT, rounding

Building and getting started with the Flask framework

Chapter6 visualization (don't want to see the version)

8581 Linear linked list inversion

第十五单元 分页、过滤
随机推荐
STM32(F407)—— 堆栈
The specific operation process of cloud GPU (Hengyuan cloud) training
Programming Specifications - LiteOS
[ROS](04)package.xml详解
8581 线性链表逆置
redis延时队列
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)
drf序列化器-Serializer
[ROS] Compiling packages packages encounters slow progress or stuck, use swap
[ROS] (04) Detailed explanation of package.xml
Unit 8 Middleware
[ROS](01)创建ROS工作空间
猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)
Haystack的介绍和使用
云片网案例
初识c语言指针
Flask上下文,蓝图和Flask-RESTful
C语言sizeof和strlen的区别
Flask项目的完整创建 七牛云与容联云
瑞吉外卖笔记——第10讲Swagger