| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:这个例题百思不得其解!
只看楼主 加入收藏
wjfko
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-2-19
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:3 
这个例题百思不得其解!
//将多个字符串按字母顺序输出。

#include <stdio.h>
#include <string.h>
   void sort(char *str[],int n)
      {
       char *temp;
       int i,j,k;
       for(i=0;i<n-1;i++)
          {
           k=1;
           for(j=i+1;j<n;j++)
              if(strcmp(str[k],str[j])>0)
                 k=j;
              if(k!=i)
              {temp=str[i];str[i]=str[k];str[k]=temp;}
          }
      }
 void  main()
      {
       int i,n=4;
       char *string[4]={"FORTRAN","PASCAL","BASIC","C"};
       sort(string,n);
       for(i=0;i<n;i++)
          printf("%s\n",string[i]);
      }

原始例题是这样的,调试的结果如下:

BASIC
FORTRAN
C
PASCAL
请按任意键继续. . .

貌似不对,上网搜索了一下,貌似很多教材都是原封不动这么写的,问题到底出在哪?

搜索更多相关主题的帖子: void 字母 include 字符串 
2012-03-01 20:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:20 
把k = 1改成 k = i

重剑无锋,大巧不工
2012-03-01 20:15
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
收藏
得分:0 
支持一下.比较经典的一个算法

成功贵在坚持
2012-03-01 20:19
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这种代码也就出现在教科书里,实际中很少用选择排序,效率太差。
这是更实用的方法。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void * a, const void *b)
{
    return strcmp(*(char **)a, *(char **)b);
}
int main()
{
    int i,n=4;
    char *string[4]={"FORTRAN","PASCAL","BASIC","C"};
    qsort(string, n, sizeof(char *), cmp);
    for(i=0;i<n;i++)
        printf("%s\n",string[i]);
    return 0;
}

重剑无锋,大巧不工
2012-03-01 20:34
快速回复:这个例题百思不得其解!
数据加载中...
 
   



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

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