- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
冒泡排序思想
冒泡排序算法冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。冒泡排序法的基本过程如下: 首先,从表头开始往后扫描线性表,在扫描过程中逐次比较相邻两个元素的大小,若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,显然,在扫描过程中,不断地将两个相邻元素中的大者往后移动,最后就将线性表中的最大者换到了表的最后;然后,从后到前扫描剩下的线性表,同样,在扫描过程中逐次比较相邻两个元素的大小,若相邻两个元素中,后面的元素小于前面的元素,则将它们互换,这样就又消去了一个逆序,显然,在扫描过程中,不断地将两相邻元素中的小者往前移动,最后就将剩下线性表中的最小者换到了表的最前面;对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时的线性表已经变为有序。在上述排序过程中,对线性表的每一次来回扫描,都将其中的最大者放到了表的最后,最小者像气泡一样冒到表的开头,因此这种排序叫做冒泡排序。假定线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。但这个工作量不是必须的,一般情况下要小于这个工作量如下所示是冒泡排序的示意图,由图可以看出,整个排序实际上之用了2遍从前往后的扫描和2遍从后往前的扫描就可以完成原序列 51731694286第一遍(从前往后) 5 1 7 3 1 69 4 2 8 6结后往前15 3 16 7 4 28 69结果11532674689第2遍(从前往后)115 3 267 4 689结果11325646789(从后往前)113 25 6 46789结果11234566789第3遍(从前往后)11234566789最后结果11234566789而对于本题:2*x+y+z=123*x+y-z=102*x+y+2*z=30x+y+z=10x =0,y =0,z = 0最初是由于x,y,z都为大于等于0,并且它们的和为10,因此x,y,z所能取到的最大值都为10,而对于2*x+y+z=12可知对于x来说,能取到的最大值为6for (int x = 0; x = 6; x++) { for (int y = 0; y = 10; y++) { for (int z = 0; z = 10; z++) { if (2 * x + y + z = 12) { if (3 * x + y - z = 10) { if (2 * x + y + 2 * z = 30) { if (x + y + z == 10) { Console.WriteLine({0},{1},{2}, x, y, z); } } } } } } }(x,y,z)求的结果有:0,0,10;0,1,9;0,2,8;0,3,7;0,4,6;0,5,5;0,6,4;0,7,3;0,8,2;0,9,1;0,10,0;1,0,9;1,1,8;1,2,7;1,3,6;1,4,5;1,5,4;1,6,3;1,7,2;1,8,1;2,0,8;2,1,7;2,2,6;2,3,5;2,4,4;2,5,3,;2,6,2改进后for (int x = 0; x = 6; x++) { for (int y = 0; y = 10 - x; y++) { for (int z = 0; z = 10 - x - y; z++) { if (2 * x + y + z = 12) { if (3 * x + y - z = 10) { if (2 * x + y + 2 * z = 30) { if (x + y + z == 10) { Console.WriteLine({0},{1},{2}, x, y, z); } } } } } } }结果虽然一样,但是这样速度会快很多
文档评论(0)