算法常识——鸡尾酒排序

前言

在前一节中,有冒泡算法的优化。
在这:https://www.cnblogs.com/aoximin/p/12251638.html。
什么是鸡尾酒排序呢?
比如说:

我们仅仅需要把1放在第一个位置即可。
假设我们是从小到大排序,那么根据最大值冒泡,需要大量次数,根据最小值冒泡只需一次。
这时候就会提出疑问啊,那么就按照最小啊,那么如果数据一换,那么是不是变成最大值冒泡。
之所以鸡尾酒叫是因为有些气泡上升有些起码下沉。每循环一次一个上升一个下沉。

code

同样分析i和j:

i依然是确定的个人。
最大值和最小值每次循环各确定一次。
假设arr.length 是偶数,需要确定的个数:arr.length/2个。
假设arr.length 是基数,同样需要确定:(arr.length-1)/2个。
i取最大值arr.length。

class Program
{
	static void Main(string[] args)
	{
		int[] intarr = new int[] {1,6,8,2,3,5,10,48,9 };
		sort(intarr);
		foreach(var i in intarr)
		{
			Console.Write(i+"\n");
		}
		Console.ReadKey();
	}
	public static void sort(int[] arr)
	{
		var temp = 0;
		var hasSore = true;

		for (var i=0;i<arr.Length/2;i++)
		{
			for (var j=i;j< arr.Length-1-i; j++)
			{
				if (arr[j] > arr[j + 1])
				{
					temp = arr[j+1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
					hasSore = false;
				}
			}
			if (hasSore)
			{
				break;
			}
			for (var j = arr.Length - 1-(i+1); j-1 >=i; j--)
			{
				if (arr[j] < arr[j - 1])
				{
					temp = arr[j-1];
					arr[j - 1] = arr[j];
					arr[j] = temp;
					hasSore = false;
				}
			}
			if (hasSore)
			{
				break;
			}
		}
	}
}
posted @ 2020-02-02 15:32  敖毛毛  阅读(130)  评论(0编辑  收藏  举报