当前位置:编程学习 > C/C++ >>

一个C语言问题

一个典型的选择排序算法的程序,但我只知道代码如何写,并不知道这种方法的运行原理,希望高手能给个解答,代码如下#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[]){int a[10];int i,j,k,m;
printf("请输入需要排序的数,用空格隔开,以回车结束:");for(i=0;i<10;i++){scanf("%d",&a[i]);}a:for(i=0;i<9;i++){k=i;for(j=i+1;j<10;j++){if(a[k]>a[j])k=j;if(k!=i){m=a[i];a[i]=a[k];a[k]=m;}}}printf("");for(i=0;i<10;i++){printf("%d",a[i]);}return 0;}
而且,我输入9 5 3 0 1 4 8 2 6 7这10个数字,输出的却是0213456789.希望高手解答我的两个问题
补充:
#include "stdafx.h"




int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
int i,j,k,m;


printf("请输入需要排序的数,用空格隔开,以回车结束:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
a:
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
{
if(a[k]>a[j])
k=j;
if(k!=i)
{
m=a[i];
a[i]=a[k];
a[k]=m;
}
}
}
printf("");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
return 0;
}
追问:嗯,谢谢,我想的用m来当一个中介,就是调换值的时候的中介而已,(k!=i)其实意义不大,是原来写了个循环,但后面发现用不了,就干脆条件永久是真就一直执行就是了。还有我希望您能告诉我为什么输出是0213456789
答案:#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    int a[10];
    int i,j,k,m;
    printf("请输入需要排序的数,用空格隔开,以回车结束:");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0; i<9; i++) //遍历1..9项,依次确定前九个最小的
    {
        for(j=i+1; j<10; j++) //遍历i后面的所有数,依次寻找比当前(a[i])小的数,如果找到,就将它们替
                                      //换。然后继续找。
        {
            if(a[j]<a[i])
            {
                m = a[i];
                a[i] = a[j];
                a[j] = m;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%d",a[i]);
    }
    return 0;

 
改了一部分代码,你的代码的思路应该是一样的,把上面的理解了再来理解你的应该就差不多了。
(你的代码中用m来保存索引,和用(k!=i)来决定替换我有点不理解,可能它的作用我也没理解到,如果你知道了,告诉一声,谢了)
 
楼上:楼主用的是VC开发平台,在tchar.h中有这么一句:
#define _tmain      main
看了你的程序我很诧异,是C吗?
主函数入口竟然不是main();?
用到了printf(),函数库文件竟然引入的是别的?
a是数组名却在程序中出现a:这中非C语法?
代码无空行?代码不空空格?不知道程序员最重要的是代码规范?


先别说排序,你的问题远没有那么简单。。。
选择排序原理:第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1)

上一个:跪求C语言编程问题 学生成绩管理系统 急!!
下一个:什么c语言

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,