C语言问题:把一个整数按大小顺序插入已排好序的数组中。

#include <stdio.h>
void main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for (i=0;i<10;i++)
{p=i;q=a[i];
for (j=i+1;j<10;j++)
if(q<a[j]){p=j;q=a[j];}
if (p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if (n>a[i])
{for(s=9;s>=i;s--) a[s+1]=a[s];
break;}
a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
}
请帮忙详细分析下!

#include <stdio.h>
void main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};//这个不用说了吧
for (i=0;i<10;i++)//十次循环
{
p=i;//到此p等于i等于0
q=a[i];//到此q等于a[0]=127
for (j=i+1;j<10;j++)//九次循环
if(q<a[j])//将q也就是a[i]和他后面的那些个元素比较,如果大于
{
p=j;//p赋值为较大的那个的下标
q=a[j];//q赋值为较大值
}
if (p!=i)//如果p!=i,注意初始时是等于的,不等于表示最大值不是a[0]是a[p]
{
s=a[i];
a[i]=a[p];
a[p]=s;//这三步交换a[i]和a[p],也就是把当前的最大值放到a[i]
}
printf("%d ",a[i]);
}//十次比较后,按最大到最小依次拍好了顺序,这个叫冒泡排序
printf("\ninput number:\n");
scanf("%d",&n);//输入要插入的数n
for(i=0;i<10;i++)//十次循环
if (n>a[i])//如果n大于a[i],表示可以插入到a[i]位置
{
for(s=9;s>=i;s--)
a[s+1]=a[s];//将a[i]后面小于n的都后移,这个比较难理解你好好想想
break;
}
a[i]=n;//插入
for(i=0;i<=10;i++)//依次输出
printf("%d ",a[i]);
printf("\n");
}

以上是我加的注释,你看看,咱们共同进步吧!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-23
#include <stdio.h>
int main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++) //最简单的选择排序法,
{//思想是从n个数中选出一个最大的放到0位再从剩下n-1个数中选出最大的放到1位,以此类推
p=i; //p用来记录最大的数的下标,先假定是第一个
q=a[i]; //其实没必要用q来记录,直接用a[p] 就行了
for(j=i+1;j<10;j++) //找出最大的数的下标
if(q<a[j]){p=j;q=a[j];} //如果不用q记录应该这样写 if(a[p]<a[j]) p=j; 即发现一个更大的数就记录它的下标

//如果最大的数不是第一个则交换它们
if(p!=i) {s=a[i]; a[i]=a[p]; a[p]=s;}

printf("%d ",a[i]); //打印出这一轮找出的数
}

printf("\ninput number:\n");
scanf("%d",&n); //读入要插入的数

for(i=0;i<10;i++) //找出要插入的数的位置
if (n>a[i])
{
for(s=9;s>=i;s--) //比这个数小的都往后移
a[s+1]=a[s];
break;
}

a[i]=n; //将要插入的数放入找到的位置
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}本回答被网友采纳
相似回答