如何实现插入数组

插入数组

继上一篇讨论排序问题之后,我学习了关于实现插入数组的方法。我想把我学到的感悟与思想结合我自己的观点分享给大家。

插入数组实现步骤
  1. 插入数组之前,该数组元素应该是有序排列的,即应先将数组进行有序化处理。
  2. 有序化处理后,应判断即将插入的数该插入到数组的哪一个位次,即找到需要插入的位次。
  3. 找到需要插入的位次之后,应先将位次之后的元素进行移动,否则会覆盖原元素数据,即移动之后的位次。
  4. 将数插入该位次,实现插入数组。
代码实现

有了步骤计划之后,就可以开始实施了,代码如下,有关说明会在代码中注释。

#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;
}
程序运行截图示例

在这里插入图片描述

结语

以上就是我关于插入数组的一些理解,资历尚浅,如有遗漏之处,望各位指出。
学路漫漫,少一些浮躁与轻浮,互相学习,互相努力,你我共勉。

发布了10 篇原创文章 · 获赞 6 · 访问量 885

猜你喜欢

转载自blog.csdn.net/WildSky_/article/details/102469780
今日推荐