| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1413 人关注过本帖
标题:透彻理解
只看楼主 加入收藏
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 28楼 TonyDeng
问一下 是不是这些都有某些固定的公式吗?
比如要对字符串按ASCII排序
程序代码:
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(p[j],p[j+1])>0)
{
   temp=p[j];
   p[j]=p[j+1];
   p[j+1]=temp;
}
2013-01-01 22:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是有模式,但你写成这样,表明你没搞清楚没个动作是干什么的。
你说一说,字符串排序是怎么排的?你写出strcmp()函数,有没有查书看过这个函数是干什么的、怎么用的?

授人以渔,不授人以鱼。
2013-01-01 22:34
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 32楼 TonyDeng
我的理解是 两个两个对比 小的放前面 循环n次。写成这样是因为我直接从一道题里面摘下来
2013-01-01 22:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
中间那一大块是交换两个数据的,那种用赋值语句交换的方法,只能用于基本数据类型,像(字符串)数组这种数据,是不能通过赋值语句交换的。对这种数据(包括结构体和对象)排序,基本手法虽然仍然是交换法,但不能再使用赋值语句,必须另外写一个段函数用于交换。

再者,字符串排序,是整个串联在一起交换,你这样两个循环,把串的数据拆了交换,那就不是交换整串了。

把一个串看成是整体,相当于最原始的交换法中的一个整数,这是关键!手法是那样,但交换的具体动作是不同的。

授人以渔,不授人以鱼。
2013-01-01 22:51
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 34楼 TonyDeng
你的意思应该改成怎么样呢。。
2013-01-01 22:54
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 34楼 TonyDeng
怎么说呢 这段不是main()函数来着 是另外一段函数
题目的要求是对一段字符串排序。。不能这样排吗?我用[j]这种啊。
2013-01-01 22:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
for (i = 第0个元素; 次末元素; 到下一个元素)
{
    for (j = 第i+1个元素; 末元素; 到下一个元素)
    {
        if (compare(元素[j], 元素[i]))    // 比较两个元素的大小关系,大返回真,比大可以,比小也可以
        {
            swap(交换元素[j]和元素[i])
        }
    }
}

compare()和swap()针对不同的数据类型写不同的代码。
前面那段,是基本的手法,但要变化的,是那两个函数,必须随着实际情形不同而不同的。

写程序,把前面那个基本的逻辑写出来,再把细化的代码封闭在另外的函数中,这样代码就清晰了,修改也容易,如果数据和比较逻辑变了,修改那两个函数即可,基本的逻辑流程是不用变的。像很多人那样,把全部东西混杂在一起,叫学C语言、面向过程编程,那是搞笑。

对字符串数组,C标准库已经给我们写好了现成的compare()函数,那就是strcmp()函数,是把两个数组作为整体比较大小的,不用再分解。这个时候,元素[i]和元素[j]都是一个字符串数组指针——具体如何交换整个内存块,是有技巧的,逻辑看起来是那样,真实做可以是另外一回事。但无论怎么改,都不会影响前面的程序逻辑,这就是函数封装的好处。这种函数的编程思想,没有一本号称某语言专家编程的书有教你的,它们只讲语法,不讲编程。

[ 本帖最后由 TonyDeng 于 2013-1-1 23:08 编辑 ]

授人以渔,不授人以鱼。
2013-01-01 23:02
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 37楼 TonyDeng
我看一下
2013-01-01 23:05
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 37楼 TonyDeng
是不是用i分别与比与除了自身的所有元素对比。
2013-01-01 23:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用i与它后面的所有元素比,把i元素变成这一串中最大的,然后往后挪一位重复上面的动作,本质就是在一串数据中找最大的那一个手法。

授人以渔,不授人以鱼。
2013-01-01 23:14
快速回复:透彻理解
数据加载中...
 
   



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

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