问题:设有数组定义int arr[N+1],在数组arr中已经有N个数据且递增有序,现在将x插入到数组arr的适当位置,使数组元素的值保持递增有序。
方法一:先将x存放在数组元素arr[N]中,再依次和前面的元素进行比较,若没有发生交换,直接跳出循环,程序结束。
#include <stdio.h>
#define N 10
int main(){
int arr[N+1];
int i,j,num;
//依次输入前N个递增数据
for(i=0;i<N;i++){
scanf("%d",&arr[i]);
}
//输入要插入的数据
printf("请输入要插入的数据:");
scanf("%d",&arr[N]);
//从后向前比较
j=N;
for(i=N-1;i>=0;i--){
if(arr[i]<arr[j]){
break;
}
else{
num=arr[i];
arr[i]=arr[j];
arr[j]=num;
}
j--;
}
for(i=0;i<N+1;i++){
printf("%5d",arr[i]);
}
}
1 2 3 4 5 60 70 80 90 100
请输入要插入的数据:15
1 2 3 4 5 15 60 70 80 90 100
--------------------------------
Process exited after 19.13 seconds with return value 0
请按任意键继续. . .
方法二:和方法一类似,从数组的最后一个元素arr[N-1]开始依次与x进行比较。
若arr[i]<=x,直接跳出循环。这种解法类似于数据结构中在数组中插入元素,通过移动数据(交换数据)来实现数据序列递增。
代码如下:
#include<stdio.h>
#define N 10
void main()
{
int arr[N+1]={10,20,30,40,50,60,70,80,90,99};
int i,x;
scanf("%d",&x);
for(i=N-1;i>=0&&arr[i]>x;i--)
arr[i+1]=arr[i];
arr[i+1]=x;
for(i=0;i<N+1;i++)
printf("%4d",arr[i]);
printf("\n");
}