美文网首页
数组元素前移、后移

数组元素前移、后移

作者: 水很大 | 来源:发表于2020-05-05 15:40 被阅读0次

本文首发于公众号:水很大
将一个长度为N的数组依次前移K位。
取数组长度为9,前移5位并通过表格来解释。
第一次找到一个标志位(这个标志位是为了解释方便而特意取的一个),通过标志位将表格分成了两部分,分别对这两部分进行逆置

1 2 3 4 5 6 7 8 9

通过逆置得到结果

5 4 3 2 1 9 8 7 6

第二次对整个表格逆置

6 7 8 9 1 2 3 4 5

这样就得到了元素依次前移五位后的数组。

void swap(int array[N],int m,int n){
  int temp;
  for(int i = m;i<=((n-m)/2+m);i++){
    temp = array[n-i+m];
    array[n-i+m] = array[i];
    array[i] = temp;
  }
}

数组前移已经知道怎么处理了,但是数组后移又该怎么处理?
还是通过一个表格解释
第一次:对整个表格逆置

1 2 3 4 5 6 7 8 9

得到结果:

9 8 7 6 5 4 3 2 1

第二次:分别对表格两个部分逆置

5 6 7 8 9 1 2 3 4

其实数组元素前移、后移本质上是一样的。其区别仅仅在于前移是先将数组的两个部分分别逆置然后整体逆置,而数组后移是先对数组进行整体逆置然后再部分逆置。
看到这里可能有一个疑问:标志位(即表格中的空格)是怎么选取的?

1 2 3 4 5 6 7 8 9

表格元素前移五位的结果是:

6 7 8 9 1 2 3 4 5

分割一下:

6 7 8 9 1 2 3 4 5

可以看见1-5整体在空格后面,6-9整体在空格前面。所以需要考虑的问题是怎样将这两部分分别放到空格的两边。

1 2 3 4 5

逆置

5 4 3 2 1

对于

6 7 8 9

逆置

9 8 7 6

再合并

5 4 3 2 1 9 8 7 6

逆置

6 7 8 9 1 2 3 4 5

最终代码:

#include<stdio.h>
#define N 9 //数组大小
#define K 5 //前移位数

void swap(int array[N],int m,int n){
  int temp;
  for(int i = m;i<=((n-m)/2+m);i++){
    temp = array[n-i+m];
    array[n-i+m] = array[i];
    array[i] = temp;
  }
}
int main(void){
  int array[N];
  for(int i=0;i<N;i++){//初始化 
    array[i] = i+1;
  }
  //前移
  swap(array,0,N-1);
  swap(array,0,K-1);
  swap(array,K,N-1);
  //后移
  /*
  swap(array,K,N-1);
  swap(array,0,N-1);
  swap(array,0,K-1);
  */
  //输出
  for(int i=0;i<N;i++){
    printf("%d ",array[i]);
  } 
}

相关文章

  • 数组元素前移、后移

    本文首发于公众号:水很大将一个长度为N的数组依次前移K位。取数组长度为9,前移5位并通过表格来解释。第一次找到一个...

  • C语言-指针和数组

    指针加减法 指针加法:后移n个元素指针减法:前移n个元素 指针和数组 数组名是数组的首元素地址,但它是一个常量。 ...

  • 链表

    数组不是组织数据的最佳结构 在做删除和插入操作的时候我们需要将其它的元素前移/后移,这样执行效率会过低 javas...

  • vue前移,后移

    首先第一个不可以前移,最后一个不可以后移 方法一 方法二 点击按钮,相对应的视图也会改变后续需要获取list的值则...

  • LeetCode--合并两个有序数组(python版)

    刚开始的想法是从头遍历两个数组如果数组2有较大值就插入值数组1中,但是这样数组1中的后续元素都要后移一位,数组中移...

  • JS 数组元素上移、下移、置顶、置底、互换

    数组元素上移 数组元素下移 数组元素置顶 数组元素置底 数组元素交换

  • 第四篇:python基础(续2)

    (1)冒泡排序 定义:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终...

  • 排序

    排序(原文链接) 1、冒泡排序 基本思想:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素...

  • 3月25日作业--夏天

    骨盆1+1个面的状态 前倾+前移 前倾+后移 前倾+侧倾 前倾+侧移 前倾+旋转 后倾+前移 ...

  • 数组常用函数

    16:数组常用函数: 1、数组中元素指针的移动current: 当前元素;next:向后移动,指向下一个元素pre...

网友评论

      本文标题:数组元素前移、后移

      本文链接:https://www.haomeiwen.com/subject/qtvmghtx.html