java 鸡尾酒排序(cocktailSort)和双指针法

鸡尾酒排序:
作为冒泡排序的一种变式,鸡尾酒排序首先从第一个元素的位置开始,到最后一个元素的位置结束,两两元素进行比较,将最大的元素置换到最后一位;再从倒数第二位元素向第一位元素比较,此次找到最小的元素,置换到队列的第一位;再继续从第二位元素开始比较,到倒数第三位元素结束……以此类推,直到比较到仅剩队列最中间的一位或两位元素结束。
代码如下:

public static void cocktailSort(int[] arr) {
			int start = 0;
			int end = arr.length - 1;
			
			while(start < end){
				for(int i = start;i < end;i++){
					if(arr[i] > arr[i + 1]){
						swap(arr,i,i + 1);
					}
				}
				end--;
				for(int i = end;i > start;i--){
					if(arr[i] < arr[i - 1]){
						swap(arr,i,i - 1);
					}
				}
				start++;
			}
         }

排列顺序如图

双指针法:
在鸡尾酒排序中,我们利用双指针法来确定每一趟比较的开始位置和结束位置。
设置一个指向第一个元素的头指针start,一个指向最后一个元素的尾指针end(注意,这里的数组下标被抽象为指针)。经历第一趟比较后,需要把尾指针end从原先的指向最后一个元素向前挪一位,指向倒数第二个元素,每经历一趟比较,都需要挪动头指针或尾指针的位置,向最中间靠近(找最小值之后挪动头指针,找最大值挪动尾指针)。建立一个while循环,将其条件设置为(start < end)或(start != end),来检验头尾指针是否相遇,如果相遇,证明排序完毕。

此方法的排序速度依赖于数据的特殊排列形式。

如有错误或更好的改进意见,欢迎批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值