九、鸡尾酒排序
鸡尾酒排序又叫定向冒泡排序,来回排序,涟漪排序,搅拌排序,快乐小时排序,它是冒泡排序的一种变形。
它和冒泡排序的不同之处在于:冒泡排序是单向进行的,而鸡尾酒排序是以双向在序列中进行排序的。
原理如下:
1)先对数组进行从左到右升序的冒泡排序;
2)再对数组进行从右到左的降序的冒泡排序;
3)以此类推,不断缩小没有排序的范围。
例如:[17, 54, 71, 49, 24, 4, 79, 32, 86, 37]
第一趟:17, 54, 71, 49, 24, 4, 79, 32, 37, 86
第二趟:4, 17, 54, 71, 49, 24, 79, 32, 37, 86
第三趟:4, 17, 54, 71, 49, 24, 32, 37, 79, 86
第四趟:4, 17, 54, 71, 49, 24, 32, 37, 79, 86
第五趟:4, 17, 54, 49, 24, 32, 37, 71, 79, 86
第六趟:4, 17, 24, 54, 49, 32, 37, 71, 79, 86
第七趟:4, 17, 24, 49, 32, 37, 54, 71, 79, 86
第八趟:4, 17, 24, 32, 49, 37, 54, 71, 79, 86
第九趟:4, 17, 24, 32, 37, 49, 54, 71, 79, 86
//鸡尾酒排序
public static void cockSort(int a[]){
//direction分辨left,right
String direction="right";
int small_flag=1;
for(int k=a.length;k>a.length/2;k--){
if("right".equals(direction)){
for(int i=small_flag;i<k;i++){
if(a[i]<a[i-1]){
int temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
}
}
direction="left";
}else{
for(int i=k;i>small_flag-1;i--){
if(a[i]<a[i-1]){
int temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
}
}
k++;
small_flag++;
direction="right";
}
}
}
。