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

一个数组向左移动i位(学会分析问题,找出规律,不要小看任何一个小程序;小程序都是实现大的功能的基础--体现问题分解的思想)

 学会分析问题,找出规律;

不要小看任何一个小程序,小程序都是实现大的功能的基础--体现问题分解的思想)

思想火花--好算法是反复努力和重新修正的结果

解法1:先将数组中的前i个元素存放在一个临时数组中,再将余下的n一i个元素左移i个位置,最后将前i个元素从临时数组复制回原数组中后面的i个位置。但是这个算法使用了i个额外的存储单元,其空间复杂度是 O(i)。

// 一个数组向左移动i位.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include<stdio.h>
int main1(int argc, char* argv[])//王红梅老师63页解法1
{int a[7]={1,2,3,4,5,6,7};int n=7;int i=3;int b[7];for(int k=0;k<i;k++){b[k]=a[k];}
/*	for(k=0;k<i;k++){printf("%d\n",b[k]);}*/for(int m=i;m<7;m++){a[m-i]=a[m];}/*	for(int test=0;test<n-i;test++){printf("%d\n",a[test]);}*/for(int t=n-i,j=0;t<7&&j<i;j++,t++)a[t]=b[j];for(k=0;k<7;k++){printf("%d\n",a[k]);}printf("Hello World!\n");return 0;
}

在代码注释的部分是为了test中间结果是否正确::::::写一个小功能就测试以下(这是一个好习惯,要坚持) 

int main()
{int a[7]={1,2,3,4,5,6,7};int n=7;int i=3;for(int k=0;k<i;k++){int temp=a[0];for(int j=1;j<7;j++){a[j-1]=a[j];}a[n-1]=temp;}for(k=0;k<7;k++){printf("%d\n",a[k]);}return 0;
}

 

思想火花--好算法是反复努力和重新修正的结果
考虑一个问题:将一个具有"个元素的数组向左循环移动i个位置。有许多应用程序会调用这个问题的算法,例如在文本编辑器中移动行的操作,磁盘整理时交换两个不同大小的相邻内存块等。所以,这个问题的算法要求有较高的时间和空间性能。
解法1:先将数组中的前i个元素存放在一个临时数组中,再将余下的n一i个元素左移i个位置,最后将前i个元素从临时数组复制回原数组中后面的i个位置。但是这个算法使用了i个额外的存储单元,其空间复杂度是 O(i)。
解法2:先设计一个函数将数组向左循环移动1个位置,然后再调用该算法i次,显

void fanzhan01(int a[],int n)
{int temp=0;for(int i=0;i<=(n-1)/2;i++)//i<(n-1)/2边界问题,举例偶数个和奇数个两种不同情况下会怎样???{temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;// a[n-i-1]我写成a[n-i]写错了}
/*	for(i=0;i<n;i++){printf("%d   ",a[i]);}*//testprintf("\n");
}
void fanzhan02(int a[],int j,int n)
{int temp=0;for(int i=j,end=n-1;i<=j;i++,end--)//i<(n-1)/2边界问题,举例偶数个和奇数个两种不同情况下会怎样???{temp=a[i];a[i]=a[end];a[end]=temp;// a[n-i-1]我写成a[n-i]写错了}
/*	for(i=j;i<n;i++){printf("%d   ",a[i]);}*/printf("\n");
}
int main()
{int a[7]={1,2,3,4,5,6,7};int n=7;int i=3;fanzhan01(a,i);fanzhan02(a,3,7);fanzhan01(a,n);for(int k=0;k<7;k++){printf("%d\n",a[k]);}///testreturn 0;
}

fanzhan02函数更易实现,但是对一个辅助变量,一定多test中间结果,别到最后发现问题错误,才知道修改到时很难找出错误


http://www.mrgr.cn/news/22925.html

相关文章:

  • Python数据分析高频面试题及答案
  • 使用gdb跟踪调试linux内核
  • 仕考网:公务员国考考什么?
  • 三维点云骨架提取(以树木为例 python 代码)
  • 月考结束老师如何发布成绩查询?
  • 时间戳和日期相互转换+检验日期合法性功能C语言
  • 推荐4款高效的录屏工具,教你如何快速录屏。
  • 风趣图解LLMs RAG的15种设计模式-第三课
  • gpt4最新保姆级教程
  • 一些面试和找工作的技巧-新资要的低并不会给你加分薪资要的高不会成为公司拒绝你的核心理由
  • OZON商品免收仓储费,OZON隐藏被取消订单的评论
  • 驾驭复杂市场,商品计划软件:企业制胜的智囊团
  • web基础之信息泄露
  • 茶则电子秤方案设计
  • 多个pdf怎么合并成一个pdf?推荐5种方法轻松合并pdf文件
  • React基础
  • Python中常用的几种数据类型及其特点
  • Java 入门指南:JVM(Java虚拟机)—— Java 类文件结构
  • 盘点4款比pr剪辑简单的视频剪辑工具。
  • iOS 15推出后利用邮件打开率的7种方法