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;
    }
  }
}
相关文章
|
1月前
|
存储 C++
C++程序中的对象数组
C++程序中的对象数组
21 0
|
29天前
|
存储 C++
C++指针数组
C++指针数组
25 1
|
1月前
|
存储 C++
C++程序数组与指针:深入理解与实践
C++程序数组与指针:深入理解与实践
27 1
|
1月前
|
存储 算法 C++
C++程序一维数组:深入理解与实践
C++程序一维数组:深入理解与实践
25 1
|
2天前
|
存储 算法 安全
C++一分钟之-数组与指针基础
【6月更文挑战第19天】在C++中,数组和指针是核心概念,数组是连续内存存储相同类型的数据,而指针是存储内存地址的变量。数组名等同于指向其首元素的常量指针。常见问题包括数组越界、尝试改变固定大小数组、不正确的指针算术以及忘记释放动态内存。使用动态分配和智能指针可避免这些问题。示例代码展示了安全访问和管理内存的方法,强调了实践的重要性。
18 3
|
25天前
|
存储 C++ 索引
c++数组
c++数组
27 2
|
29天前
|
存储 C++ 索引
C++数组
C++数组
27 0
|
29天前
|
C++
C++ 重载 数组对象输入输出流的实现!!!
C++ 重载 数组对象输入输出流的实现!!!
|
30天前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
24 0
|
2天前
|
存储 编译器 C++

热门文章

最新文章