| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2632 人关注过本帖
标题:选择法排序问题...
只看楼主 加入收藏
soevil
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-31
收藏
 问题点数:0 回复次数:32 
选择法排序问题...
题目:用选择法排列10个数.



#include "stdio.h"
int main(void)
{
    int a[10],i,j,k,t;

    printf("请输入10个数字:\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[k]>a[j])
            {
                k=j;
                t=a[i];
                a[i]=a[k];
                a[k]=t;
            }

    }

    printf("重新排列后是:\n");
    for(i=0;i<10;i++)
        printf("%5d",a[i]);

    getch();
    return 0;
}


-----------------------------------------------------------------------
在VC++6.0上编译通过...可是输入数字后排列有点问题...是哪儿错了呢??
搜索更多相关主题的帖子: 选择 
2008-10-31 22:35
soevil
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-31
收藏
得分:0 
怎么没人啊...

我在baidu上找的答案和这个一样...为什么运行的结果就不对呢??
2008-10-31 23:10
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
if(a[k]>a[j]) k=j;
{   
    t=a[i];  
    a[i]=a[k];
    a[k]=t;
}

 再试试……

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-31 23:14
soevil
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-31
收藏
得分:0 
结果如图...还是不对啊~~~

11111111.jpg (20.64 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-10-31 23:23
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
不知道了……   我没细看

未命名.jpg (428.99 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-10-31 23:35
soevil
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-31
收藏
得分:0 
晕..代码贴出来嘛~~~~~~
2008-10-31 23:41
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
你还晕  我还晕呢

我用的就是你发的代码

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-11-01 01:39
soevil
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-31
收藏
得分:0 
问题解决...还是得谢谢liyanhong版主啊..



    for(i=0;i<9;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
            if(a[k]>a[j])
            {
                k=j;
                t=a[i];
                a[i]=a[k];
                a[k]=t;
            }

    }


将k=i;改到第二个for循环里面就可以了...呵呵..菜鸟问题..大家莫怪~~
2008-11-01 20:48
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-11-01 22:25
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 8# 的帖子
-------------

    你将第一个k=i改到第二个循环里,就等于没用了,所以,你这个程序就是冒泡法排序了。你的选择排序写错了,应该是下面这个样子的:
/*开始排列*/

    for(i=0;i<10;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
            if(a[k]>a[j])
                k=j;
        if(k!=i)
        {
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
    }
 
    请这回再试试。
2008-11-02 09:45
快速回复:选择法排序问题...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029788 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved