编辑锁定鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。该算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。中文名鸡尾酒排序简介定向冒泡排序别名搅拌排序说明选择排序的一种变形使用鸡尾酒排序为一列数字进行排序的过程可以通过右图形象的展示出来:数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。鸡尾酒排序Javapublicstaticint[]cocktailSort(int[]src) { //将最小值排到队尾 for(inti=0;i<;i++) { for(intj=i;j<;j++) { if(src[j]<src[j+1]) { inttemp=src[j]; src[j]=src[j+1]; src[j+1]=temp; } (交换小+(src)); } //将最大值排到队头 for(intj=(i+1);j>i;j--) { if(src[j]>src[j-1]) { inttemp=src[j]; src[j]=src[j-1]; src[j-1]=temp; } (交换大+(src)); } (第+i+次排序结果:+(src)); } returnsrc; } 鸡尾酒排序Pascaltype arra= array[1..10000]ofinteger; procedure sort(b:arra); vari, bottom,top,t:integer; f: boolean; begin bottom:=1; top:=n; f:=true; while(f=true)do begin f:=false; fori:=bottomtotop-1do ifa[i]>a[i+1]thenbegint:=a[i];a[i]:=a[i+1];a[i+1]:=t;f:=true;end; top:=top-1; fori:=topdowntobottom+1do ifa[i]<a[i-1]thenbegint:=a[i];a[i]:=a[i-1];a[i-1]:=t;f:=trueend; bottom:=bottom+1; end; end;鸡尾酒排序C 语言functioncocktail_sort(list,list_length)//thefirstelementoflisthasindex0 { bottom=0; top=list_length-1; swapped=true; bound=0;//优化循环次数,记录已经排序的边界,减少循环次数 while(swapped)//ifnoelementshavebeenswapped,thenthelistissorted { swapped=false; for(i=bottom;i<top;i=i+1) { if(list[i]>list[i+1])//testwhetherthetwoelementsareinthecorrectorder { swap(list[i],list[i+1]);//letthetwoelementschangeplaces swapped=true; bound=i; } } //decreasestopthebecausetheelementwiththelargestvalueintheunsorted //partofthelistisnowonthepositiontop //top=top-1; top=bound; for(i=top;i>bottom;i=i-1) { if(list[i]<list[i-1]) { swap(list[i],list[i-1]); swapped=true; bound=i; } } //increasesbottombecausetheelementwiththesmallestvalueintheunsorted //partofthelistisnowonthepositionbottom //bottom=bottom+1; bottom=bound; } } pytho鸡尾酒排序pythondefcocktail_sort(l): size=len(l) sign=1 foriinrange(size/2): ifsign: sign=0 forjinrange(i,size-1-i): ifl[j]>l[j+1]: l[j],l[j+1]=l[j+1],l[j] forkinrange(size-2-i,i,-1): ifl[k]<l[k-1]: l[k],l[k-1]=l[k-1],l[k] sign=1 else: break printl鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问两次(升序降序各一次 )次序列就可以完成排序,但如果使用冒泡排序则需要四次。 [1]鸡尾酒排序最糟或是平均所花费的次数都是O(n²),但如果序列在一开始已经大部分排序过的话,会接近O(n)。参考资料