也就是定向冒泡排序, 鸡尾酒搅拌排序, 搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此演算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
使用鸡尾酒排序为一列数字进行排序的过程可以通过右图形象的展示出来:
数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。
procedure Change(var dLeft,dRight:Double);
var
temp:Double;
begin
temp:=dLeft;
dLeft:=dRight;
dRight:=temp;
end;
procedure TForm1.CockSorts(var latarray:array of double);
var
i,low,up,index:Integer;
RightValue,LeftValue:Double;
begin
low:=0;
up:=High(latarray);
index:=low;
while(up>low) do
begin
for i:=low to up-1 do
begin
if (latarray[i]>latarray[i+1]) then
begin
Change(latarray[i],latarray[i+1]);
index:=i;
end;
end;
up:=index;
for i:=up downto low do
begin
if (latarray[i]<latarray[i-1]) then
begin
Change(latarray[i],latarray[i-1]);
index:=i;
end;
end;
low:=index;
end;
end;