插入数组
继上一篇讨论排序问题之后,我学习了关于实现插入数组的方法。我想把我学到的感悟与思想结合我自己的观点分享给大家。
插入数组实现步骤
- 插入数组之前,该数组元素应该是有序排列的,即应先将数组进行有序化处理。
- 有序化处理后,应判断即将插入的数该插入到数组的哪一个位次,即找到需要插入的位次。
- 找到需要插入的位次之后,应先将位次之后的元素进行移动,否则会覆盖原元素数据,即移动之后的位次。
- 将数插入该位次,实现插入数组。
代码实现
有了步骤计划之后,就可以开始实施了,代码如下,有关说明会在代码中注释。
#include <iostream>
using namespace std;
int nums[99];//定义99个是因为如果插入元素后大于数组成员数,程序会崩溃,插入n个数需要满足比成员数大n
int member = 0;
int main(void)
{
nums[member++] = 1;//定义一个乱序的数组
nums[member++] = 9;
nums[member++] = 4;
nums[member++] = 44;
nums[member++] = 5;
nums[member++] = 88;
nums[member++] = 13;
nums[member++] = 159;
nums[member++] = 357;
nums[member++] = 951;
int temp;//定义一个临时变量,方便排序
int min_index;
int min_num;
int num;//定义一个需要插入的整数
cout << "排序前:" << endl;
for (int i = 0; i < member; i++)
{
cout << nums[i] << "\t";
}
for (int i = 0; i < member; i++)//利用选择排序将数组元素有序化
{
min_num = nums[i];
min_index = i;
for (int j = i; j < member; j++)
{
if (min_num > nums[j])
{
min_num = nums[j];
min_index = j;
}
}
temp = nums[i];
nums[i] = nums[min_index];
nums[min_index] = temp;
}//排序完成,准备进行插入操作
cout << endl << "排序后:" << endl;
for (int i = 0; i < member; i++)
{
cout << nums[i] << "\t";
}//输出排序后
cout << endl << "请输入需要插入的数:";
cin >> num;//输入数值赋给需要插入的num
cout << "最终结果:" << endl;
int index = 0;//定义插入的位次
for (int i = 0; i < member; i++)//记录需要插入的位次,此处应注意,如果num比目前nums数组的元素中的最大值还要大,就会出bug,所以要有一个判断阻止这种结果出现
{
if (num <= nums[i])
{
index = i;
break;//找到位次后跳出循环
}
else if (num >= nums[member])//防止出现bug,如果比最大值还大,就定义位次为最大成员数
{
index = member;
}
}
for (int i = member; i >= index; i--)
{
nums[i + 1] = nums[i];
}//查找位次以及将位次之后的元素后移,此两处循环的有些难懂,具体自己参透吧,一定会有收获的。
nums[index] = num;//插入完成
member++;//数组成员数+1
for (int i = 0; i < member; i++)
{
cout << nums[i] << "\t";
}
return 0;
}
程序运行截图示例
结语
以上就是我关于插入数组的一些理解,资历尚浅,如有遗漏之处,望各位指出。
学路漫漫,少一些浮躁与轻浮,互相学习,互相努力,你我共勉。