设有一个已按由小到大排好序的数组,今输入一个整数,要求按原来排序的规律将它插入到数组中。:

2024-11-26 09:56:20
推荐回答(2个)
回答1:

#include
int main()
{
int array[11] = {0,11,22,33,55,66,77,88,99,100};
int n;
int i;
int p;

printf("orignal array is:\n");
for(i=0;i<11;i++)
{
printf("%4d",array[i]);
}

printf("\ninput insert number n:\n");
scanf("%d",&n);

/*
假定插入数和原数组的数不存在相等的情况;
插入位置在中间,不考虑插入位置在头尾的情况;
请自行思考插入位置在头或尾的情况;

基本思想:
1.循环比较,找到插入位置
2.把从插入位置起,后面的所有元素整体向后移动
一个元素的位置;
(整体向后移动如何实现?
最后一个向后移,给倒数第二个向后移腾出位置;
倒数第二个向后移,移到原先最后一个的位置,
给倒数第三个向后移腾出位置;
...... 如此循环,为插入腾出了插入位置
)
3.插入数放入插入位置
*/
for(i=0;i<9;i++)
{
if(n>array[i] && n< array[i+1])
{
p = i+1;
break;
}
}
i = 10;
while(i!=p)
{
array[i] = array[i-1];
i--;
}
array[i] = n;

printf("new array is:\n");
for(i=0;i<11;i++)
{
printf("%4d",array[i]);
}
return 0;
}

运行效果
C:\Documents and Settings\Owner\桌面>test.exe
orignal array is:
0 11 22 33 55 66 77 88 99 100 0
input insert number n:
44
new array is:
0 11 22 33 44 55 66 77 88 99 100
C:\Documents and Settings\Owner\桌面>

回答2:

二分法。。。。。