C语言如何把一个整数按大小顺序插入已排好序的数组中?
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");
}
以上是我加的注释,你看看,咱们共同进步吧!
第一种方法
main(){
int i,j,p,n,s,a[11]={127,6,3,28,68,87,105,54,162,18};
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(a[i]<=a[j])
p=a[i],a[i]=a[j],a[j]=p;
}
printf("输入参与排序的数字:");
scanf("%d",&n);
a[10]=n;
for(i=0;i<11;i++)if(a[10]>a[i])
p=a[i],a[i]=a[10],a[10]=p;
for(i=0;i<11;i++)
printf("%d ",a[i]);
}
第二中种方法
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");
}
/*整体思路是先将输入的十个数从小到大排列好,然后再将单独输入的数与数组比较大小并将其插入数组中,这部分是关键。需要注意的是我们在刚开始时将数组长度定义为11,就是为后面插入一个数预留的空位*/
#include <stdio.h>
void main()
{
int a[11]; /*数组长度为11*/
int n=10,i,j,k,t;
int x,count;
printf("请输入十个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /*用选择法将输入的十个数排列好*/
{
k=i;
for(j=i+1;j<10;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<10;i++) /*输出排列好的十个数*/
printf("%d ",a[i]);
printf("\n");
printf("请输入任意一个整数:\n");
scanf("%d",&x);
for(i=0;i<10;i++) /*将输入的数x与数组元素比较大小*/ {
if(x<a[i])
{
for(j=10;j>i;j--)
a[j]=a[j-1];
a[i]=x;
break;
}
}
for(i=0;i<11;i++) /*输出最后结果*/
printf("%d ",a[i]);
printf("\n");
}
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");
}
以上是我加的注释,你看看,咱们共同进步吧!