【03】逆序数组

简介: 【03】逆序数组

💥一、逆序函数是什么?

示例:输入1 4 7 9 3

输出:3 9 7 4 1

通俗来说就是将数组一行数据倒着打印。

 

✨二、逆序函数原码

🥳1.直接逆序

 

思路:

1.利用scanf与for循环获取多组数据;

2.用left与right两个变量进行左右交换,交换完左边向右靠近,右边向左边靠近,继续交换,直到       left>=right为止;

图示如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void reverse()
{
  int i = 0;
  int j = 0;
  int tmp = 0;
  printf("请输入你要输入数的个数:");
  scanf("%d", &j);
  int arr[] = { 0 };//注意这里数组没有确定个数
 
  for (i = 0; i < j; i++)
  {
    scanf("%d", &arr[i]);
  }
 
  int left = 0;
  int right = j-1;
  while (left <= right)//利用左右下标逐渐向中间靠近
  {
    tmp = arr[left];
    arr[left] = arr[right];
    arr[right] = tmp;
    left++;
    right--;
  }
  for(i = 0;i <=j-1;i++)
  { 
    printf("%d\n",arr[i]);
  }
 
 
}
int main()
{
  reverse();
  return 0;
}

 

由于上述代码利用数组存储个数时没有确定数组个数就会导致如下情况:

 

正确做法:

int arr[10] = {0}//允许输入十个数以内的逆序,也可换成100或者其他

修改后代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void reverse()
{
  int i = 0;
  int j = 0;
  int tmp = 0;
  printf("请输入你要输入数的个数(<10):");
  scanf("%d", &j);
  int arr[10] = { 0 };
 
 
  for (i = 0; i < j; i++)
  {
    scanf("%d", &arr[i]);
  }
 
  int left = 0;
  int right = j-1;
  while (left <= right)//利用左右下标逐渐向中间靠近
  {
    tmp = arr[left];
    arr[left] = arr[right];
    arr[right] = tmp;
    left++;
    right--;
  }
  for(i = 0;i <=j-1;i++)
  { 
    printf("%d\n",arr[i]);
  }
 
 
}
int main()
{
  reverse();
  return 0;
}

🥳🥳2.创建临时数组逆序

 

思路:

将数组的数从后往前放入到临时创建的数组中

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void reverse()
{
  int i = 0;
  int j = 0;
  int tmp = 0;
  printf("请输入你要输入数的个数(<10):");
  scanf("%d", &j);
  int arr[10] = { 0 };
 
 
  for (i = 0; i < j; i++)
  {
    scanf("%d", &arr[i]);
  }
 
 
    //直接逆序
    //tmp = arr[j];//先将最后一个数存储起来
    //for (i = j; i > 0; i--)
    //{
    //  arr[j] = arr[j - 1];//循环逆转
    //}
    //arr[0] = tmp;//将第一个储存最后一个数完成逆转
 
  //创建临时数组实现逆序
  int tem[10] = { 0 };//创建临时数组
  for (i = 0; i < j; i++)
  {
    tem[i] = arr[j-i- 1];//将arr数组后面的数存储到tem数组前面
  }
 
 
  for(i = 0;i <=j-1;i++)//打印逆序后的数组
  { 
    printf("%d\n",arr[i]);
  }
 
 
}
int main()
{
  reverse();
  return 0;
}

🎉三、结言

       以上就是C语言实现逆序数组完整实现啦~🌹🌹🌹土土这里用了两种方法一种是直接发利用左右两个指针来遍历,另一种是创建临时数组来将原来的数组中的数从后往前放置,两种方法各有优缺点哦~如果有什么问题,欢迎打在评论区或者私法给我哦~💖💖

相关文章
|
24天前
|
算法 C语言 索引
215. 数组中的第K个最大元素(时间复杂度o(n))
215. 数组中的第K个最大元素(时间复杂度o(n))
|
3月前
|
人工智能
数组逆序
数组逆序
19 3
|
10月前
|
C#
C#基础⑥.2——数组(冒泡排序、求最值、数组排序、forr反转)
一次语文测试后,老师让班长统计每一个学生的成绩并计算全班(全班共5人)的平均成绩,然后把所有成绩显示出来。
|
5月前
|
索引
数组下标为什么从0开始
数组下标为什么从0开始
|
5月前
遍历一维数组
遍历一维数组
34 0
|
9月前
|
前端开发
数组下标对应缺位问题
数组下标对应缺位问题
33 0
|
11月前
剑指offer 57. 数组中数值和下标相等的元素
剑指offer 57. 数组中数值和下标相等的元素
68 0
剑指offer 57. 数组中数值和下标相等的元素
LeetCode 5428. 重新排列数组
给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。
48 0