调用函数排序数字问题,形参用指针,求大神指点
作业:从键盘上输入任意10个数,将其按从小到大顺序排列;再输入一个数,将该数插入到数列中,不改变数列的排序规律。 分析与设计: 用一维数组保存输入的数据,调用排序函数(函数参数用指针)进行排序;调用插入新数函数(函数参数用指针),找到该数在数列中的位置,把从该位置到最后的元素,依次后移一位,再将该数插入数列中。
#include <stdio.h>
int main()
{
void sort_1(int * x,int m);
void sort_2(int * x,int m);
int i,k,t,n,a[11], * p ;
p=a;
printf("Please input 10 numbers:\n");
for (i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort_1(p,10);
printf("\n");
printf("The sorted numbers :\n");
for(i=0;i<10;i++)
{
printf("%4d",*p);
p++;
}
printf("\n\n");
printf("请再输入一个值: \n");
scanf("%d",&n);
p=a;
sort_2(p,11);
for(i=0;i<11;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
// 输入10个数的从小到大排列的函数
void sort_1(int * x,int m)
{
int i,j,t;
for(j=0;j<m-1;j++)
{
for(i=0;i<m-j-1;i++)
if(*(x+i)>*(x+i+1))
{
t=*(x+i);
*(x+i)=*(x+i+1);
*(x+i+1)=t;
}
}
}
// 增加一个数后,11个数从小到大排列的函数
void sort_2(int * x,int m)
{
int i,k,n;
for(i=0;i<m-1;i++)
{
if(n<*(x+i))
break;
}
for(k=m;i<k;k--)
{
*(x+k)=*(x+k-1);
}
*(x+i)=n;
}
为什么运行结果是这样的:
Please input 10 numbers:
87 23 54 6 5 89 12 10 23 8
The sorted numbers :
5 6 8 10 12 23 23 54 87 89
请再输入一个值:
55
5 6 8 10 12 23 23 54 87 894206653
Process returned 0 (0x0) execution time : 41.086 s
Press any key to continue.