在已排好序的C语言数组中按原排序规律插入一个输入数,可依据插入数与数组元素的大小关系,将其插入合适位置。以下是几种实现方法:
### 方法一
此方法先判断插入数是否大于数组最后一个数,若大于则放于数组末尾;若不大于,则逐个比较找到插入位置,再将后续元素后移。
```c
#include<stdio.h>
int main() {
int a[11]={1,2,6,9,11,13,19,28,33,99};
int temp1,temp2,num,end,i,j;
printf("array a:\n");
for(i=0;i<10;i++) {
printf("%5d",a[i]);
}
printf("\n");
printf("insert data:");
scanf("%d",&num);
end=a[9];
if(num>a[9]) {
a[10]=num;
} else {
for(i=0;i<10;i++) {
if(a[i]>num) {
temp1=a[i];
a[i]=num;
for(j=i+1;j<11;j++) {
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
printf("New array a:\n");
for(i=0;i<11;i++) {
printf("%5d",a[i]);
}
printf("\n");
return 0;
}
```
### 方法二
同样先判断插入数和数组最后一个数的大小,插入数大则放末尾;不大则找插入位置并后移后续元素。
```c
#include<stdio.h>
int main() {
int arr[11] = { 1,2,13,24,35,46,57,68,79,100 };
for (int i = 0;i < 10;i++)
printf("%d ", arr[i]);
printf("\n");
int num,tep1=0,tep2=0;
printf("请输入一个数:\n");
scanf("%d", &num);
if (num >= arr[9]) {
arr[10] = num;
} else {
for (int i = 0;i < 10;i++) {
if (arr[i] >= num) {
tep1 = arr[i];
arr[i] = num;
for (int j = i + 1;j < 11;j++) {
tep2 = arr[j];
arr[j] = tep1;
tep1 = tep2;
}
break;
}
}
}
printf("插入后的序列:\n");
for (int i = 0;i < 11;i++)
printf("%d ", arr[i]);
printf("\n\n\n");
}
```
### 方法三
从后往前查找插入位置,将大于插入数的元素后移,再把插入数放到合适位置。
```c
int main() {
int c=0;
int a[10] = {0, 1,2,3,4,6,7,8,9 };
int end = 8;
int i;
scanf("%d", &c);
for (i = 0; i < 9; i++)
printf("%d", a[i]);
printf("\n");
while (end >= 0 && c < a[end]) {
a[end + 1] = a[end];
end--;
}
a[end + 1] = c;
for (i = 0; i < 10; i++)
printf("%d", a[i]);
printf("\n");
return 0;
}
```
### 方法四
通过比较插入数和数组元素,若插入数小则交换,若大于最后一个数则放于末尾。
```c
#include <stdio.h>
int main() {
int a[11]={1,2,3,4,5,7,8,9,10,11};
int i,t,m;
printf("输入一个数:\n");
scanf("%d",&m);
for(i=0;i<11;i++) {
if(m<a[i]) {
t=m;m=a[i];a[i]=t;
} else if(m>a[9])
a[10]=m;
}
printf("排序后:\n");
for(i=0;i<11;i++)
printf("%d ",a[i]);
return 0;
}
```