数组算法:倒置,查找,插入,删除

数组的倒置

方法一:定义原数组,再定义一个用来存储倒置后的数据的数组,即是将数据一一拷贝到一个新的数组。

代码实现

#include <stdio.h>
int main (void)
{
	int a[5],b[5],i;
	printf("请输入5个数:\n");
	for (i=0;i<5;i++)
		scanf("%d",&a[i]);
	for (i=0;i<5;i++)
		b[i]=a[4-i];
	for (i=0;i<5;i++)
		printf("%d\t",b[i]);
	printf("\n");
	return 0;
}

但是这样将数据一一拷贝,算法实现的效率并不高。

方法二:将第一个元素和最后一个元素进行交换,第二个元素和倒数第二个元素进行交换……依次……

这时,可能要考虑到数组元素的奇偶问题。若元素个数为偶数,那么都可以实现一一交换。若元素个数为奇数,则会留下最中间的一个元素。
定义两个变量i和j,i=0,j=n-1,每交换一次,i++,j–。只要i<j,就使循环一直进行。

代码实现

#include <stdio.h>
int main (void)
{
	int a[10],i,j,temp;
	printf("请输入10个数:\n");
	for (i=0;i<10;i++)
		scanf("%d",&a[i]);
	i=0;j=9; //注意这里必须再次给i赋值。因为经过上面的for循环后,i的值变为为9
	while (i<j)
	{
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
		i++;j--;
	}
	for (i=0;i<10;i++)
		printf("%d\t",a[i]);
	return 0;
}

数组元素的查找

方法一:顺序查找

输入一个数组,再输入一个数字,按照顺序依次查找。

#include <stdio.h>
int main (void)
{
	int a[10]={64,72,87,98,78,95,75,84,91,90};
	int i,m,flag=0;
	printf("请输入一个数字:\n");
	scanf("%d",&m);
	for (i=0;i<10;i++)
		if (a[i]==m)
		{
			flag=1;
			break;
		}
	if (flag==1)
		printf("YES\n");
	if (flag==0)
		printf("NO\n");
	return 0;
}

数组插入

在坐标为index位置插入一个数字。可以再定义一个用来存放插入了一个元素后的新数组。

代码实现

#include <stdio.h>
int main (void)
{
	int a[11]={2,3,4,7,8,10,23,56,7,12,3};
	int b[12],index,i,m;
	printf("请输入插入值的下标:\n");
	scanf("%d",&index);
	printf("请输入插入值:\n");
	scanf("%d",&m);
	for (i=0;i<12;i++)
	{
		if (i<index)
			b[i]=a[i];
		else if (i==index)
			b[i]=m;
		else
			b[i]=a[i-1];
	}
	for (i=0;i<12;i++)
		printf("%d\t",b[i]);
	return 0;
}

将某数插入到已经排好的序列中。

可以先比较,看插入的数在哪两个数之间,推断之后插入的数应该在的位置。

代码实现

#include <stdio.h>
int main (void)
{
	int a[6]={3,8,19,36,78,87};
	int b[7],i,m,index;
	printf("请输入要插入的值:\n");
	scanf("%d",&m);
	for (i=0;i<6;i++)
		if (m>a[i] && m<=a[i+1])  //假定比最大值还大,或者比最小值还小,代码有些问题。
			index=i+1;
	for (i=0;i<7;i++)
	{
		if (i<index)
			b[i]=a[i];
		else if (i==index)
			b[i]=m;
		else
			b[i]=a[i-1];
	}
	for (i=0;i<7;i++)
		printf("%d\t",b[i]);
	printf("\n");
	return 0;
}

删除算法

在下标为index的位置删除一个数字。

代码实现

#include <stdio.h>
int main (void)
{
	int a[10]={23,45,76,93,45,76,81,23,41,56};
	int index,b[9],i;//数组b用来存储删除元素后的数据
	printf("请输入你想删除的元素的下标:\n");
	scanf("%d",&index);
	for (i=0;i<9;i++)
	{
		if (i<index)
			b[i]=a[i];
		else if (i>=index)
			b[i]=a[i+1];
	}
	for (i=0;i<9;i++)
		printf("%d\t",b[i]);
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釉色清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值