前言
在前一节中,有冒泡算法的优化。
在这: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+"
");
}
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;
}
}
}
}