整理关于有序序列的问题

简介: 我们可以设置两个flag,flag1代表升序,flag2代表降序。然后遍历下数组,用后面面的数减去前面的数,如果>0,则flag1++;如果<0,则flag2++;这里呢比较的话n个数比较n-1次就可以了。所以如果最后flag1==n-1或者flag2= =n-1,则表面这个数组是有序的否则不是。

一些关于有序序列的题目--可以练练,积累经验


1.有序序列判断


有序序列判断击进去牛客网练习


34e36c413cd64b639750f42619be1c46.png


这里有序分为正序和逆序,数据呢要么递增,要么递减才符合。那怎么判断呢?


我们可以设置两个flag,flag1代表升序,flag2代表降序。然后遍历下数组,用后面面的数减去前面的数,如果>0,则flag1++;如果<0,则flag2++;这里呢比较的话n个数比较n-1次就可以了。所以如果最后flag1==n-1或者flag2= =n-1,则表面这个数组是有序的否则不是。


#include <stdio.h>
int main()
{
  int n;
  int i;
  scanf("%d", &n);
  int arr[100];
  int count1 = 0;
  int count2 = 0;
  for (i = 0;i < n;i++)
  {
    scanf("%d", &arr[i]);
  }
  for (i = 0;i < n-1;i++)
  {
    if (arr[i + 1] - arr[i] >= 0)
    {
      count1++;
    }
    else
    {
      count2++;
    }
  }
  if (count1 == n - 1 || count2 == n - 1)
  {
    printf("sorted\n");
  }
  else
  {
    printf("unsorted\n");
  }
  return 0;
}


2.有序序列插入一个整数


有序序列插入一个整数


2837c41e828c418ab298dde4953d476e.png


这里要插入一个数,然后要求输出要有序,也就是把这个数也根据大小排进去,我们可以从这个数组的arr【i】(i=n-1)后面开始进行比较,最后面的数字与insert(插入的数字)比较如果小于那么直接把插入的数字放在最后面,如果大于插入的数字那么就要往后面覆盖,留出一个位子,然后再让倒数第二个数与insert比较如果还大于那么就往后走,…直到有一个数比insert小那么就直接让insert插进arr【i+1】里去然后break跳出循环。


这里还有一个比较头疼的事那就是要考虑边界问题,有些问题如果不考虑的话就要出问题,这题就是,如果有这种情况insert比arr数组中的所有数都小,那么arr整个数组都往后覆盖了一格,但insert,并没有插进去,这就很尴尬

5de4c247beac4ce6a9cda76373823e28.png


所以我们需要再讨论一下就讨论如果这个arr【0】>insert那么这种情况就是图上所示的了,需要把insert插入到第一个位子上去。


49b0a61588674dbca0bb04a173796bcb.png


代码如下:


#include <stdio.h>
int main()
{
  int n;
  scanf("%d", &n);
  int i;
  int arr[100];
  for (i = 0;i < n;i++)
  {
    scanf("%d", &arr[i]);
  }
  int insert;
  scanf("%d", &insert);
  for (i=n-1;i>=0;i--)
  {
    if (arr[i] > insert)
    {
      arr[i + 1] = arr[i];
    }
    else
    {
      arr[i + 1] = insert;
      break;
    }
  }
  if (arr[0] > insert)
  {
    arr[0] = insert;
  }
  for (i = 0;i < n+1;i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}


2.有序序列合并


有序序列合并


这里要注意有序的特点,然后遍历两数组即可。要求输入两组有序序列,然后合并再输出一个新的有序序列,这里肯定要先定义三个数组,arr1,arr2,arr3来存放数据,我们可以根据有序的特点来想,用i来遍历arr1,用j来遍历arr2,然后arr1[ i ]与arr2[ j ]来对比,arr3是用来存放两个数组对比出来较小的先放进去,较大的数后放进去,那么该怎么放呢?

d309f16308df4ed1bef17fa1a6fbb36d.png


首先让arr1【i】与arr2【j】比较如果arr1<arr2则将arr1放进arr3中,然后让i++,k++(k是用来遍历arr3的)可以看图 1< 3 那么将1放进arr3中 i++,(k也要++)变成2再与arr2比较还是比3小,把2放进arr3中,i++,k++,5与3相比大于则把arr2中的3放进arr3,然后j++,k++,就这样直到arr1比完,那么arr2中剩余的数可以直接放进arr3中了,因为有序的特点。这个过程是个循环,条件也就是i<n,并且j<m;8f7bcf02c4b941928ab357bd4c4f8c90.png然后这个循环结束了就表面有一个数组遍历完了,但不知道哪一个要分类一下,如果是arr1先遍历完(也就是i==n了),那么需要将arr2中剩下的数放进arr3中,如果是arr2先遍历完(也就是j= =m了),那么需要将arr1中的数放进arr3中,前面的i 和j 已经有了,这里就不用知道循环结束的值直接for(;j<m;j++)或者for(;i<m;i++);把剩下的数放进arr3中时k的值也要一起变喔每次塞进一个数k都要++一下。到这里就把数都从小到大的放进了arr3中了。


int main()
{
  int n, m;
  scanf("%d%d", &n, &m);
  int arr1[1000];
  int arr2[1000];
  int arr3[2000];
  int i;
  for (i = 0;i < n;i++)
  {
    scanf("%d", &arr1[i]);
  }
  for (i = 0;i < m;i++)
  {
    scanf("%d", &arr2[i]);
  }
  //遍历找出比较小的放前面大的放后面//注意这里面的i要重新赋值为0;
  int j = 0;//用j来遍历arr2
  i = 0;//用i在遍历arr1
  int k = 0;//k用来遍历arr3
  while (i < n && j < m)
  {
    if (arr1[i] < arr2[j])
    {
      arr3[k++] = arr1[i++];
    }
    else
    {
      arr3[k++] = arr2[j++];
    }
  }
  if (i == n)
  {
    for (;j < m;j++)
    {
      arr3[k++] = arr2[j];
    }
  }
  else
  {
    for (;i < n;i++)
    {
      arr3[k++] = arr1[i];
    }
  }
  for (i = 0;i < n + m;i++)
  {
    printf("%d ", arr3[i]);
  }
  return 0;
}
相关文章
|
3天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
420 189
|
2天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
313 194