总结了三种方法
(参考了其他博主的)
#include<stdio.h>
void Insert(int a[],int n,int x)
int main()
{
int n,i,j;
int a[N];
printf("请输入数组长度:");
scanf("%d",&n);
int x;
printf("请输入要插入的数:");
scanf("%d",&x);
printf("请输入数组:\n");
for(i = 0;i < n;i++)
{
scanf("%d",a+i);
}
Insert(a,n,x);
printf("新的数组:\n");
for(i = 0;i < n+1;i++)
{
printf(" %d",a[i]);
}
return 0;
}
//法一:交换法 绕,复杂,头晕
void Insert(int a[],int n,int x)
{
int i,j;
int t1,t2;
if(x >= a[n-1])//如果x比所有元素都大,直接放到最后
a[n] = x;
else
{
for(i = 0;i < n;i++)//遍历数组
{
if(x < a[i])
{
t1 = a[i];//将第一个比x大的数的位置腾出来,数据保存到t1中
a[i] = x;//将x存入a[i]
//将剩下的元素整体往后移动
for(j = i+1;j<n+1;j++)
{
t2 = a[j];//把第二个比x大的数拿出来,此时a[i+1]的位置是空的,t1=a[i],t2=a[i+1]
a[j] = t1;//把t1,也就是a[i]放到a[j]也就是a[i+1]中
t1 = t2;//把a[i+1]放到t1中当作下一个a[i]
//实现一次移动
}
break;
}
}
}
}
法二:拖动法,拉开插入 比较形象,我挺喜欢,只是我可能想不到要用j--的方式
void Insert(int a[],int n,int x)
{
int i,j;
if(x >= a[n-1])//如果x比所有元素都大,直接放到最后
a[n] = x;
else
{
for(i = 0;i < n;i++)
{
if(x <= a[i])
{
for(j = n;j > i;j--)
{
a[j] = a[j - 1];
}
a[i] = x;
break;
}
}
}
}*/
//法三:指针 方便,绝绝子,好好学指针
//不用考虑x>a[n-1]的情况
void Insert(int*a,int n,int x)
{
int i,j,m;
for(i = 0;i < n;i++)
{
//循环直到遇到比x大的数
if(x < *(a+i))
{
//这里可以不用单独令t=i了,不能令m=*(a+i),会出错
break;
}
}
for(j = n;j > i;j--)
{
*(a+j) = *(a+j-1);
}
*(a+i) = x;
}