C++数组中插入元素。

简介: C++数组中插入元素。

问题:

在已经排序的数组中插入一个数,插入后的数组仍是有序的。

为了简化问题,将顺序规定为升序数组类型为double。

插入函数的代码如下:

 

//将data插入到数组arr中,使插入后仍是升序。
void insert(double data,double arr[],int len)
{
  for (int i = 0; i < len; ++i)
  {
    if (data<arr[i])
    {
      len ++;
      double *arr_t = new double [len];
      for (int j = len-1; j >i; --j)
        arr_t[j] = arr[j-1]; //后移
      arr_t[i] = data; //插入
      for (int k = 0; k< i; ++k)
        arr_t[k] = arr[k];
 
      delete []arr;
      arr = new double[len];
      for(int index = 0;index <len;++index)
        arr[index] = arr_t[index];
      delete [] arr_t;
      break;
    }
  }
}

.遍历数组,(0到len-1),

 遇到第一个比data大的数arr[i] 就将data插入到这个位置i.

 插入的方法:

 由于多了一个数,原来的数组大小应该+1才能装下这些数。

 所以数组长度 len++;由于长度变化了,数组也就变了。于是用arr_t 来 new 一个新的数组。

 将第i个元素以及i后面的元素向后移,将data插入到i位置。然后将i之前的元素复制到arr_t数组中,

 此时得到了插入了data后的数组arr_t。

 再将arr_t 深复制到原来的数组arr中即可。


然而这个方法有问题,当data>=arr[len-1]时,即arr数组中没有比dada大的数时,上面的方法就没法处理了。

于是对这种情况进行处理。

这种情况不需要后移,只要将data放在最后就可以。

void insert(double data, double arr[], int len)
{
  if (data >= arr[len - 1])
  {
    len++;
    double *arr_t = new double[len];
    arr_t[len - 1] = data;
    for (int m = 0; m < len - 1; m++)
      arr_t[m] = arr[m];
 
    //深复制arr_t到arr中
    delete[]arr;
    arr = new double[len];
    for (int index = 0; index <len; ++index)
      arr[index] = arr_t[index];
    delete[] arr_t;
    return;
  }
  for (int i = 0; i < len; ++i)
  {
    if (data<arr[i] )
    {
      len++;
      double *arr_t = new double[len];
      for (int j = len - 1; j >i; --j)
        arr_t[j] = arr[j - 1]; //后移
      arr_t[i] = data; //插入
      for (int k = 0; k< i; ++k)
        arr_t[k] = arr[k];
 
      //深复制arr_t到arr中
      delete[]arr;
      arr = new double[len];
      for (int index = 0; index <len; ++index)
        arr[index] = arr_t[index];
      delete[] arr_t;
      break;
    }
  }
}
相关文章
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
264 4
|
9月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
142 5
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
108 4
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
91 6
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
93 6
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
141 5
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
633 0
|
安全 编译器 C语言
C++入门-数组
C++入门-数组
|
vr&ar C++
1695. 删除子数组的最大得分(C++,滑动窗口)
1695. 删除子数组的最大得分(C++,滑动窗口)