修改如下,供参考:
#include <stdio.h>
void main()
{
int a[11], i = 0, key, j;
printf("please enter ten numbers\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
printf("please enter a number\n");
scanf("%d", &key);
for (i = 0; i < 10; i++){
if (key >= a[9])
{
a[10] = key;
break;
}
else{
if(key < a[i]){
for (j = 10; j > i; j--)
a[j] = a[j - 1];
a[i] = key;
break;
}
}
}
for (i = 0; i < 11; i++)
printf("%d ", a[i]);
}
使用动态分配 有用请采纳
#include<stdio.h>
#include<stdlib.h>
int main(){
int size = 10; // 初始空间
int count = 0; // 记录数组中当前元素个数
int* nums;
nums = (int*)malloc(sizeof(int) * size); // 动态分配空间
// 假设初始只有10个排好序的数
for(int i = 0; i < 10; i++){
scanf("%d", &nums[i]);
count += 1;
}
int otherN; // 输入的要插入到有序序列中的数
while (scanf("%d", &otherN) && otherN != -1){ // 以-1作为输入的结束条件
count += 1;
if(count > size){
size += 10; // 增大十个数的空间
nums = (int*)realloc(nums, sizeof(int) * size); // 重新分配空间
}
// 移动数据
int i;
for(i = count - 2; i >= 0; i--){
if (nums[i] > otherN)
nums[i + 1] = nums[i];
else // 找到小于otherN的第一个位置
break;
}
nums[i + 1] = otherN;
for(int j = 0; j < count; j++)
printf("%d ", nums[j]);
printf("\n");
}
}