| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1405 人关注过本帖
标题:这两个sort函数什么区别~~~
只看楼主 加入收藏
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
这两个sort函数什么区别~~~
程序代码:
#include"string.h"
main(){
void sort(char *name[],int n);
void sort2(char *name[],int n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
int n=sizeof(name) / sizeof(char   *);
sort2(name,n);
print(name,n);
}
void sort(char *name[],int n){
char *pt;
int i,j,k;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[i],name[j])>0)
{
pt=name[i];
name[i]=name[j];
name[j]=pt;
}
}
}
void sort2(char *name[],int n){
char *pt;
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){
pt=name[i];
name[i]=name[k];
name[k]=pt;
} else{
    printf("i=%d,k=%d\n",i,k);
    }
}
}

void print(char *name[],int n){
int i;
for (i=0;i<n;i++) printf("%s\n",name[i]);  getch();
}
这个sort函数跟sort2函数什么区别,sort2的效率会更高?
有必要在strcmp之后再做一次判断吗????想不通

[ 本帖最后由 xuxu_c 于 2010-6-11 18:18 编辑 ]
搜索更多相关主题的帖子: sort 函数 
2010-06-11 18:09
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
收藏
得分:0 
为什么要加个变量k啊???
2010-06-11 18:11
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:5 
是对字符串的排序。第一个是升序排序,第二个是降序排序!
#include"string.h"
main(){
void sort(char *name[],int n);
void sort2(char *name[],int n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
int n=sizeof(name) / sizeof(char   *);
sort2(name,n);
print(name,n);
}
void sort(char *name[],int n){
char *pt;
int i,j,k;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[i],name[j])>0)//判断前一个字符串与后一个字符串的大小,如果前面的大,就进行交换!
{
pt=name[i];
name[i]=name[j];
name[j]=pt;
}
}
}
void sort2(char *name[],int n){
char *pt;
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;//判断前一个字符串与后一个字符串的大小,如果前面的大,就把j的值赋值给k,如果小,不赋值;
if(k!=i){ //判断上面有没有赋值,如果赋值了k和j相等就不进行操作,如果没有赋值说明前面的字符串不大于后面的,那么就进行交换!
pt=name[i];
name[i]=name[k];
name[k]=pt;
} else{
    printf("i=%d,k=%d\n",i,k);
    }
}
}

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

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-06-11 18:45
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
收藏
得分:0 
回复 3楼 myhnuhai
sort2的效率会更高?
有必要在strcmp之后再做一次判断吗????
2010-06-12 09:19
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:15 
sort是发现一个小的就执行交换,在最恶劣的情况下得交换n-1次
sort2是找到最小的执行一次交换
效率的区别就在于交换次数

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-06-12 10:06
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
学习下哈
2010-06-12 10:13
快速回复:这两个sort函数什么区别~~~
数据加载中...
 
   



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

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