论坛: 编程破解 标题: 刚学C有些不明白 复制本贴地址    
作者: void [void]    论坛用户   登录
void main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
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(i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s; }
printf("%d",a[i]);
}
那位老手可以帮我每行解释一下,谢谢!

地主 发表时间: 05-10-09 17:42

回复: windflower [windflower]   论坛用户   登录
每行都要解释下吗?
那你自己还要不要动脑筋?
这是一个排序程序,但我忘记是叫交换排序还是选择排序。
从第一个元素开始,和它后面的每一个元素比较大小,如果后面的大,则记住大的元素的位置和值,再用这个大的与后面的继续比较直到在10个数中找到最大的那个,然后把它和数组第一个元素交换。
这样,外循环每一次都找到后面未排序中的最大元素,插入前面己排序的后面
结束后,就从大到小成有序数组。



B1层 发表时间: 05-10-09 18:58

回复: zhoen889 [zhoen889]   论坛用户   登录
是选择排序,楼上解释的很清楚!

B2层 发表时间: 05-10-09 22:20

回复: void [void]   论坛用户   登录
我了该了~~ 哈~

B3层 发表时间: 05-10-11 19:41

回复: qwhacker [qwhacker]      登录
这是选择法排序,一般得c教材上还会介绍一种方法:冒泡法,不过比较繁琐,效率低。

B4层 发表时间: 05-10-24 22:09

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号