| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 405 人关注过本帖
标题:按照从小到大的输出几组字符串,但是结果并不是从小到大,为什么
只看楼主 加入收藏
waja
Rank: 2
等 级:论坛游民
帖 子:53
专家分:52
注 册:2012-7-27
结帖率:81.82%
收藏
已结贴  问题点数:10 回复次数:3 
按照从小到大的输出几组字符串,但是结果并不是从小到大,为什么
#include"stdio.h"//输出异常。
#include "string.h"
void main()
{
    void sort(char*name[],int n);
    void print(char*name[],int n);
    char*name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
    int n=5;
    sort(name,n);
    print(name,n);
}

void sort(char *name[],int n)
{
    char *temp;
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(strcmp(name[k],name[j])>0)k=j;
            if(k!=i)
            {
                temp=name[k];
                name[k]=name[j];
                name[j]=temp;
            }
        }
    }
}

void print(char*name[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%s\n",name[i]);
    }



return:
Follow me
Great Wall
Fortran
Computer design
BASIC
搜索更多相关主题的帖子: 字符串 include design void 
2012-10-05 18:08
w823352417
Rank: 3Rank: 3
来 自:甘肃兰州
等 级:论坛游侠
威 望:1
帖 子:43
专家分:113
注 册:2012-10-4
收藏
得分:4 
if(strcmp(name[k],name[j])>0)k=j;
//此时k的值已经发生了变化,不是i的值了,所以下面交换的时候已经不是比较时的name[k],明白么?
这里冒泡排序法利用k没有什么必要,完全可以不用,直接用i就可以。
if(strcmp(name[k],name[j])>0)k=j;
            if(k!=i)
            {
                temp=name[k];
                name[k]=name[j];
                name[j]=temp;
            }
完全可以把这两个if合并在一起。
 if(strcmp(name[i],name[j])>0)
     {
           temp=name[i];
           name[i]=name[j];
           name[j]=temp;
      }
希望对你有所帮助!

在代码中享受乐趣
2012-10-05 18:59
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
原程序是排序的一种思路。我作了一点修改,请多看几遍一定能有会体会。
#include"stdio.h"//输出异常。
#include "string.h"
void main()
{
    void sort(char*name[],int n);
    void print(char*name[],int n);
    char*name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
    int n=5;
    sort(name,n);
    print(name,n);
}

void sort(char *name[],int n)
{
    char *temp;
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=k+1;j<n;j++)     //此循环的作用是当I取一个值时从I后找一个最小值,并暂时保存在name[k]
        {
            if(strcmp(name[k],name[j])>0)
                k=j;
            name[k]=name[j];
        }
            if(k!=i)//最小值nmae[k]和前面的数组name[i]交换。
            {
                temp=name[k];
                name[k]=name[i];//
                name[i]=temp;//
            }
        //}
    }
}

void print(char*name[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%s\n",name[i]);
    }


}

www.qunxingw.wang
2012-10-05 20:46
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:4 
//name[k]=name[j];
请注释

www.qunxingw.wang
2012-10-05 21:14
快速回复:按照从小到大的输出几组字符串,但是结果并不是从小到大,为什么
数据加载中...
 
   



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

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