| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖
标题:[求助]结业考试上机题目寻求另一种写法。。。。。。
只看楼主 加入收藏
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 

这个用的是简单选择排序法。。。。。。

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


这个用的是冒泡法。。。。。。

void Sort(char *name[],int n)
{
int i,j;
char *s;
for(j=1;j<=n-1;j++) //j控制比较趟数
for(i=0;i<n-j;i++)//i控制每趟比较的次数
{
if(strcmp(name[i],name[i+1])>0)
{
s=name[i];
name[i]=name[i+1];
name[i+1]=s;
}
}
}

请问插入排序法应该怎么写???

[此贴子已经被作者于2007-5-29 21:32:41编辑过]


生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 21:13
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
插入法
void fun(int a[])
{
int i,j,t;
for(i=2;i<=n;i++)
{
t=a[i];
while(a[j]>t)
{
a[j+1]=a[j];j=j-1;
}
a[j+1]=t;
}
}

羊肉串 葡萄干 哈密瓜!!
2007-05-29 21:46
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
不太明白,不过我先试试看

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 22:02
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
以下是引用mp3aaa在2007-5-29 21:46:10的发言:
插入法
void fun(int a[])
{
int i,j,t;
for(i=2;i<=n;i++)
{
t=a[i];
while(a[j]>t)
{
a[j+1]=a[j];j=j-1;
}
a[j+1]=t;
}
}

按照你说的这个我写了,但是还是不能运行,输入完字符串程序就挂了
void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
for(i=2;i<=n;i++)
{

s=name[i];
j=i-1;
while(name[j]>s)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}


生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-29 23:39
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
回复14楼 你的程序里面没有限制 j 的值,

while(name[j]>s)
{
name[j+1]=name[j];
j=j-1;
}
循环结束以后,j会变成负数的。
这个函数我在另外一个帖子上帮你修改过了。

人生重要的不是所站的位置,而是所朝的方向
2007-05-30 01:10
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
我按照你在那个帖子上的改了,程序可以运行,但是运行的结果不正确啊
正确的结果排序后的顺序是
ARM
Apple
IMTI
Teacher
Welcome
照你的修改了之后的排序结果是
Apple
ARM
IMTI
Teacher
Welcome

void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
char c;
for(i=1;i<n;i++)
{
c=name[i][0];
s=name[i];
j=i-1;
while(j >= 0 && name[j][0] > c)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-30 08:46
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
好了
void Sort(char *name[],int n)//插入排序法
{
int i,j;
char *s;
for(i=1;i<n;i++)
{
s=name[i];
j=i-1;
while(j >= 0 && strcmp(s, name[j]) < 0)
{
name[j+1]=name[j];
j=j-1;
}
name[j+1]=s;
}
}

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-05-30 11:20
快速回复:[求助]结业考试上机题目寻求另一种写法。。。。。。
数据加载中...
 
   



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

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