贴过来
但这也就算了,反而是碰到一些影片放映版本的问题,觉得必需抱怨一下。 《死囚逃生记》竟然是英语配音的版本! 虽然配得不错,电影也很好看,但总是有点不爽。 更惨的是《乡村牧师日记》 看下来实在是一头雾水
这家店之前有介绍过了,但后来换到天空来,也忘了贴过来,刚好年初有跟朋友去吃过,有重拍过一次照片(当初是用手机拍的),所以再重介绍一次。 因为朋友大多是吃素的,所以我们就约在这家店吃饭,之前也有来用过餐,当时是吃味噌火锅。 火锅的汤头很清淡,里面的料都是以菇类为主,而且不像一般的火锅店一样,放很多火锅料,里头的火锅料只有两三块,并没有很多
我们主要进行关心的就是双重for循环以及其中的交换操作,首先外层循环表示要进行比较的趟数,每一趟都会产生一个最大值或最小值,这也就是冒泡的由来,i的范围限定为i < arr.length - 1,为什么不是i < arr.length呢?由上图可知,当未排序的数组中只有一个元素时,不需要再进行比较了,这时整个数组已经是有序状态了。那么内层循环中,为什么 j 的限制条件 为j < arr.length - 1 - i呢?这个也比较好理解,首先第一次的时候,要把 j 的范围限制在j < arr.length - 1 -0,这样arr[j] > arr[j+1]这样的操作才不会出现数组越界,进行第二趟比较的时候,arr[length -1]位置的元素已经是最大的,不需要再进行比较,这时候就要写成j < arr.length - 1 - 1,总结起来就是j < arr.length - 1 - i 但是我们进一步探究,上面的代码是存在这样的弊端的:加入第二趟排序之后,数组就已经是有序状态了,那么后面的几趟比较是不是非常多余呢?下面介绍冒泡排序的改进 代码都是自己在IDE中实现的,直接全部贴过来了,虽然看起来很冗长,其实关键的核心代码就那么几行,我们来看具体的改进方法,采用的方法就是设置一个flag变量,在当前这一趟比较中,如果发生了元素的交换,那么将flag设置为true,如果这趟比较从头到尾都没有进行过交换,那么最终的flag值为false,直接break退出循环。 用我自己的话理解呢,这个改进就是在之前的单向寻找最大值的基础上,增加了反向寻找最小值,也就是双向冒泡,总体上来讲,鸡尾酒排序要比普通冒泡排序的交换次数要少,但是对于鸡尾酒排序,在算法的时间复杂度和空间复杂度上并没有改进,在完全逆序数组进行排序时,不管是普通的还是改进的,表现得都是非常差