开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1235|回复: 9
收起左侧

[已解决] 关于降序排序的问题,初始化中为什么赋值?

 关闭 [复制链接]
结帖率:64% (52/81)
发表于 2012-9-15 13:30:45 | 显示全部楼层 |阅读模式   广东省揭阳市
2精币
在一个编辑框里面输入内容时,以换行符为标准,进行降序排序,每次最大值都必须初始化,这能看懂,就是不知道为什么里面最大数的位置要=1???我是读不懂了
而把【最大数的位置=1】去掉,排序就乱了,为什么会这样,看来看去看不出这行有什么作用?在这里赋给它到底有什么作用,各位高手,说得通俗容易点哈!谢谢!
就是图中红框框那个

主要就是想不通【最大数的位置=1】里边的最大数的位置在下面不是要被赋值吗?干嘛上面也赋值?

最佳答案

查看完整内容

这次看了一下代码 赋值的原因是因为 如果第一个数组元素即是最大值,不至于返回-1或0 懂? 例如输入:4 3 2 1 没有比4大的 难道要返回整数型变量的初始值-1吗?

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:46% (16/35)
发表于 2012-9-15 13:30:46 | 显示全部楼层   内蒙古自治区赤峰市
这次看了一下代码
赋值的原因是因为
如果第一个数组元素即是最大值,不至于返回-1或0
懂?
例如输入:4 3 2 1
没有比4大的
难道要返回整数型变量的初始值-1吗?

点评

多谢了!了解了,假设第一个数是最大的,问题就清楚了,多谢多谢!   广东省揭阳市  详情 回复 发表于 2012-9-15 20:57
回复

使用道具 举报

结帖率:42% (5/12)
发表于 2012-9-15 13:41:31 | 显示全部楼层   加拿大
我表示没看懂你要干嘛

点评

我在文本框输入一些数字,进行排序,图中的代码是从大到小进行排序。   广东省揭阳市  详情 回复 发表于 2012-9-15 14:12
回复

使用道具 举报

结帖率:64% (52/81)
 楼主| 发表于 2012-9-15 14:12:16 | 显示全部楼层   广东省揭阳市
紅顏じ亦沉淪ジ 发表于 2012-9-15 13:41
我表示没看懂你要干嘛

我在文本框输入一些数字,进行排序,图中的代码是从大到小进行排序。
回复

使用道具 举报

发表于 2012-9-15 14:42:10 | 显示全部楼层   黑龙江省大庆市
是因为,你使用了“如果”
“如果”相当于
"
if()
{}
else
{}
"

有否则关系,如果你不给最大数位置赋值为“1”,

当最大值位置为1时,

如果循环体内代码不执行,

直接跳到条件为假箭头位置了,

跳过了”最大值位置=n“,

此时”最大值位置“保留上次的n值,

在执行删除成员操作时,应该删第一个,却删了第n个,就删错了!

点评

偶在最里边的计次循环调试输出那个最大的数的位置,为什么=0???不是已经把N覆盖了最大的数的位置吗?而调试输出居然=0,受到大循环的影响了???我把大循环去掉,只剩下小循环,这是,最大的数的位置又正常了?觉   广东省揭阳市  详情 回复 发表于 2012-9-15 19:23
回复

使用道具 举报

结帖率:64% (52/81)
 楼主| 发表于 2012-9-15 19:23:25 | 显示全部楼层   广东省揭阳市
boshi728 发表于 2012-9-15 14:42
是因为,你使用了“如果”
“如果”相当于
"

偶在最里边的计次循环调试输出那个最大的数的位置,为什么=0???不是已经把N覆盖了最大的数的位置吗?而调试输出居然=0,受到大循环的影响了???我把大循环去掉,只剩下小循环,这是,最大的数的位置又正常了?觉得奇怪!

点评

我上面说的,你明白了么? 你把代码发下,没看明白你第二个问题   黑龙江省大庆市  详情 回复 发表于 2012-9-15 19:58
回复

使用道具 举报

结帖率:46% (16/35)
发表于 2012-9-15 19:27:32 | 显示全部楼层   内蒙古自治区赤峰市
你把每行代码按F9设置断点
程序执行到那里的时候就会停止。你查看各个变量的值。向下如果变量+1后的结果
或者你可以把那一行赋值代码注释掉,单步看一下结果
回复

使用道具 举报

结帖率:46% (16/35)
发表于 2012-9-15 19:28:38 | 显示全部楼层   内蒙古自治区赤峰市
一般这种赋值是为了 让数组成员 不超出限制
我写的很蹩脚的排列数组:
.版本 2

.子程序 _ZSK_排列数组, , 公开
.参数 参数_欲被排列的数组, 文本型, 数组
.参数 参数_欲放置的数组, 文本型, 数组
.参数 参数_分隔符, 文本型
.参数 参数_排列的证据在分隔符分出的第几个部分内, 整数型, 可空, 0或空为最后一个,-1为倒数第一个,-2为倒数第二个...
.参数 参数_是否替换保存, 逻辑型
.局部变量 局部_i, 整数型
.局部变量 局部_temp_sz, 文本型, , "0"
.局部变量 局部_int_最大项, 整数型
.局部变量 局部_temp_sz2, 文本型, , "0"
.局部变量 局部_sz_欲返回数组, 文本型, , "0"
.局部变量 局部_欲被排列的数组, 文本型, , "0"

局部_temp_sz = 参数_欲被排列的数组
局部_欲被排列的数组 = 参数_欲被排列的数组
.计次循环首 (取数组成员数 (局部_欲被排列的数组), 局部_i)
    .如果真 (取数组成员数 (局部_temp_sz) = 1)
        .判断开始 (参数_是否替换保存 = 真)
            加入成员 (局部_sz_欲返回数组, 局部_temp_sz [1])
            跳出循环 ()
        .默认
            加入成员 (参数_欲放置的数组, 局部_temp_sz [1])
            跳出循环 ()
        .判断结束

    .如果真结束
    .如果 (参数_排列的证据在分隔符分出的第几个部分内 = 0)  ' 不能执行这个样子的
        局部_int_最大项 = _ZSK_冒泡 (局部_temp_sz, 参数_分隔符, )
    .否则
        .如果 (取文本左边 (到文本 (参数_排列的证据在分隔符分出的第几个部分内), 1) = “-”)  ' 如果从倒数开始
            .如果 (局部_i > 取数组成员数 (局部_temp_sz))
                加入成员 (局部_sz_欲返回数组, 局部_temp_sz [取数组成员数 (局部_temp_sz)])
                跳出循环 ()
            .否则
                局部_temp_sz2 = 分割文本 (局部_temp_sz [局部_i], 参数_分隔符, )
            .如果结束
            局部_int_最大项 = _ZSK_冒泡 (局部_temp_sz, 参数_分隔符, 取数组成员数 (局部_temp_sz2) + 参数_排列的证据在分隔符分出的第几个部分内)
        .否则
            局部_int_最大项 = _ZSK_冒泡 (局部_temp_sz, 参数_分隔符, 参数_排列的证据在分隔符分出的第几个部分内)
        .如果结束

    .如果结束
    .判断开始 (参数_是否替换保存 = 真)
        加入成员 (局部_sz_欲返回数组, 局部_temp_sz [局部_int_最大项])
    .默认
        加入成员 (参数_欲放置的数组, 局部_temp_sz [局部_int_最大项])
    .判断结束
    .如果真 (取数组成员数 (局部_欲被排列的数组) ≠ 1)
        删除成员 (局部_temp_sz, 局部_int_最大项, 1)
    .如果真结束
    .如果真 (取数组成员数 (局部_temp_sz) = 1)
        .判断开始 (参数_是否替换保存 = 真)
            加入成员 (局部_sz_欲返回数组, 局部_temp_sz [1])
            跳出循环 ()
        .默认
            加入成员 (参数_欲放置的数组, 局部_temp_sz [1])
            跳出循环 ()
        .判断结束

    .如果真结束

.计次循环尾 ()
.如果真 (参数_是否替换保存 = 真)
    参数_欲放置的数组 = 局部_sz_欲返回数组
    返回 ()
.如果真结束
返回 ()

.版本 2

.子程序 _ZSK_冒泡, 整数型, 公开
.参数 欲被冒泡数组, 文本型, 数组
.参数 分隔符, 文本型
.参数 第几次的分割, 整数型, 可空, 默认为最后一个
.局部变量 局部_temp_sz, 文本型, , "0"
.局部变量 局部_int_最大值, 整数型
.局部变量 局部_int_最大值所在项, 整数型
.局部变量 局部_i, 整数型
.局部变量 局部_sz_欲被冒泡数组, 文本型, , "0"

int_匹配项最大值 = 1
.如果 (取数组成员数 (欲被冒泡数组) = 1)
    返回 (1)
.否则
    局部_sz_欲被冒泡数组 = 欲被冒泡数组
    .如果真 (取数组成员数 (局部_sz_欲被冒泡数组) ≥ 1)
        局部_temp_sz = 分割文本 (局部_sz_欲被冒泡数组 [1], 分隔符, )
        .如果真 (取数组成员数 (局部_temp_sz) = 0)
            局部_int_最大值 = 到整数 (局部_sz_欲被冒泡数组 [1])
            局部_int_最大值所在项 = 1
            .计次循环首 (取数组成员数 (局部_sz_欲被冒泡数组), 局部_i)  ' 选择法,地球人都知道
                .如果真 (到整数 (局部_sz_欲被冒泡数组 [局部_i]) > 0)
                    .如果真 (到整数 (局部_sz_欲被冒泡数组 [局部_i]) > 局部_int_最大值)
                        局部_int_最大值 = 到整数 (局部_sz_欲被冒泡数组 [局部_i])
                        局部_int_最大值所在项 = 局部_i
                    .如果真结束

                .如果真结束

            .计次循环尾 ()
            返回 (局部_int_最大值所在项)
        .如果真结束

        .判断开始 (是否为空 (第几次的分割))
            局部_int_最大值 = 到整数 (局部_temp_sz [取数组成员数 (局部_temp_sz)])
        .默认
            局部_int_最大值 = 到整数 (局部_temp_sz [第几次的分割])
        .判断结束
        局部_int_最大值所在项 = 1
        .如果真 (取数组成员数 (局部_sz_欲被冒泡数组) ≥ 1)
            .计次循环首 (取数组成员数 (局部_sz_欲被冒泡数组), 局部_i)  ' 选择法,地球人都知道
                局部_temp_sz = 分割文本 (局部_sz_欲被冒泡数组 [局部_i], 分隔符, )
                .判断开始 (是否为空 (第几次的分割))
                    .如果真 (到整数 (局部_temp_sz [取数组成员数 (局部_temp_sz)]) > 0)
                        .如果真 (到整数 (局部_temp_sz [取数组成员数 (局部_temp_sz)]) > 局部_int_最大值)
                            局部_int_最大值 = 到整数 (局部_temp_sz [取数组成员数 (局部_temp_sz)])
                            局部_int_最大值所在项 = 局部_i
                        .如果真结束

                    .如果真结束

                .默认
                    .如果真 (到整数 (局部_temp_sz [第几次的分割]) > 0)
                        .如果真 (到整数 (局部_temp_sz [第几次的分割]) > 局部_int_最大值)
                            局部_int_最大值 = 到整数 (局部_temp_sz [第几次的分割])
                            局部_int_最大值所在项 = 局部_i
                        .如果真结束

                    .如果真结束


                .判断结束

            .计次循环尾 ()
        .如果真结束

    .如果真结束

.如果结束
返回 (局部_int_最大值所在项)
回复

使用道具 举报

发表于 2012-9-15 19:58:11 | 显示全部楼层   黑龙江省大庆市
詠不言敗 发表于 2012-9-15 19:23
偶在最里边的计次循环调试输出那个最大的数的位置,为什么=0???不是已经把N覆盖了最大的数的位置吗?而 ...

我上面说的,你明白了么?
你把代码发下,没看明白你第二个问题
回复

使用道具 举报

结帖率:64% (52/81)
 楼主| 发表于 2012-9-15 20:57:27 | 显示全部楼层   广东省揭阳市
ZealotMaster 发表于 2012-9-15 19:29
这次看了一下代码
赋值的原因是因为
如果第一个数组元素即是最大值,不至于返回-1或0

{:soso_e142:}多谢了!了解了,假设第一个数是最大的,问题就清楚了,多谢多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表