资源描述:
《冒泡排序思想》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、冒泡排序算法冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。冒泡排序法的基本过程如下:首先,从表头开始往后扫描线性表,在扫描过程中逐次比较相邻两个元素的大小,若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,显然,在扫描过程中,不断地将两个相邻元素中的大者往后移动,最后就将线性表中的最大者换到了表的最后;然后,从后到前扫描剩下的线性表,同样,在扫描过程中逐次比较相邻两个元素的大小,若相邻两个元素中,后面的元素小于前面的元素,则将它们互换,这样就又消去了一个逆序,显然,在扫描过
2、程中,不断地将两相邻元素中的小者往前移动,最后就将剩下线性表中的最小者换到了表的最前面;对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时的线性表已经变为有序。在上述排序过程中,对线性表的每一次来回扫描,都将其中的最大者放到了表的最后,最小者像气泡一样冒到表的开头,因此这种排序叫做冒泡排序。假定线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。但这个工作量不是必须的,一般情况下要小于这个工作量如下所示是冒泡排序的示意图,由图可以看出,整个排序实际上之用
3、了2遍从前往后的扫描和2遍从后往前的扫描就可以完成原序列51731694286第一遍(从前往后)5ßà17ßà3ßà1ßà69ßà4ßà2ßà8ßà6结果15316742869从后往前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
4、*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(intx=0;x<=6;x++){for(inty=0;y<=10;y++){for(intz=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);
5、}}}}}}}(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(intx=0;x<=6;x++){for(inty=0;y<=10-x;y++){for(intz=0;z<=10-x-y;z++){if(2*x+y+z<=12){i
6、f(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);}}}}}}}结果虽然一样,但是这样速度会快很多