排序-帮忙分析一下过程,该如何解决
排序-帮忙分析一下过程
把一个整数按大小顺序插入已排好序的数组中。
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 ");
}
------解决方案--------------------
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]; //这里有个赋值语句p=i;
for(j=i+1;j <10;j++)
if(q <a[j]) {p=j;q=a[j];}
if(p!=i) //而这里为什么又判断p!=i,实在弄不懂。//这个判断恰好就是选择排序的精髓,有了这个判断,下面的交换语句就只需要执行一次了
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
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 ");
}
------解决方案--------------------
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]; //这里有个赋值语句p=i;
for(j=i+1;j <10;j++)
if(q <a[j]) {p=j;q=a[j];}
if(p!=i) //而这里为什么又判断p!=i,实在弄不懂。//这个判断恰好就是选择排序的精髓,有了这个判断,下面的交换语句就只需要执行一次了
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf( "%d ",a[i]);
}
}