初学者问个c的基础问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 08:34:41
int i,j,p,q,n,s,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(a[j]>q){p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p]; ///这个地方为什么不能直接用j而用了p////
a[p]=s; /// 我菜鸟 望高人执教 ////
}
#include"stdio.h"
void main()
{int i,j,p,q,s,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(a[j]>q){p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p]; a[p]=s;
}
}
原程序是这个 就是从大到小排列 为啥{s=a[i];
a[i]=a[p]; a[p]=s; }不直接用j

个人认为:
p不一定等于j的,因为每次j都是10而p是最大数的下标,所以只能用p不能用j。每次从剩下的数中选最大的移到最前面,应该是冒泡排序吧,数组里有10个数用a[10]就可以了

好像少了一个“}”

看不懂哈。

你的大括号没弄好,不知道哪个循环在哪里,难以帮助你解决……

少了一个“}”
而且你这个程序应该给的全面点,这部分太少了,不明白你的意图