返回大旺国际登录网站

Java实现鸡尾酒排序算法

时间:2013-05-02 21:56来源:大旺国际登录网站www.zhixing123.cn 编辑:麦田守望者

鸡尾酒排序又叫定向冒泡排序,来回排序,涟漪排序,搅拌排序,快乐小时排序,他其实是冒泡排序的一种变形。它和冒泡排序的不同之处就在于:冒泡排序是单向进行的,而鸡尾酒排序是以双向在序列中进行排序的。
 

鸡尾酒算法原理

i. 先对数组从左到右进行升序的冒泡排序;
ii. 再对数组进行从右到左的降序的冒泡排序;
iii. 以此类推,持续的、依次的改变冒泡的方向,并不断缩小没有排序的数组范围;

如图所示:

图示鸡尾酒排序过程
 


例: 88 7 79 64 55 98 48 52 4 13
第一趟: 7 79 64 55 88 48 52 4 13 98
第二趟: 4 7 79 64 55 88 48 42 13 98
第三趟: 4 7 64 55 79 48 42 13 88 98
第四趟: 4 7 13 64 55 79 48 42 88 98
第五趟: 4 7 13 55 64 48 42 79 88 98
第六趟: 4 7 13 42 55 64 48 79 88 98
第七趟: 4 7 13 42 55 48 64 79 88 98
第八趟: 4 7 13 42 48 55 64 79 88 98

Java代码实现过程

在java中使用生成不重复随机数的方法,生成10个1-100之间的随机数并存放在num数组对象中。并且因为是鸡尾酒排序是左右进行的,所以需要定义标志位String direction=”right”;来指明当前应该向左还是向右排序。完整代码如下:
import java.util.Random;

public class CockSort {

public static void main(String[] args) {

// 定义数组num存放10个1-100之间的随机数字
int num[] = new int[10];

Random random = new Random();
// 生成10个1-100随机数算法
for (int i = 0; i < 10; i++) {
num[i] = random.nextInt(100) + 1;
for (int j = 0; j < i; j++) {
if (num[j] == num[i]) {
i--;
break;
}
}
}
// 打印数组对象num
System.out.println("生成10个随机数,顺序杂乱无章");
for (int i = 0; i < num.length; i++) {
System.out.print("num[" + i + "]=" + num[i] + " ");
}
String direction="right";
int small_flag=1;
// 开始鸡尾酒排序算
for(int k=10;k>5;k--){

if(direction.equals("right")){

for (int i = small_flag; i < k; i++) {

if (num[i] < num[i - 1]) {
int p = num[i - 1];
num[i - 1] = num[i];
num[i] = p;
}
}
direction="left";
}else{
for (int i = k-1; i >small_flag-1; i--) {
if (num[i] < num[i - 1]) {
int p = num[i - 1];
num[i - 1] = num[i];
num[i] = p;
}
}
small_flag++;
k++;
direction="right";
}

// 打印数组对象nu
System.out.println();
System.out.println("使用冒泡排序排列后的顺序")
for (int i = 0; i < num.length; i++)
System.out.print("num[" + i + "]=" + num[i] + " ");
}
}
}

得到的一次结果:

生成10个随机数,顺序杂乱无章
num[0]=4 num[1]=8 num[2]=12 num[3]=87 num[4]=94 num[5]=32 num[6]=38 num[7]=47 num[8]=85 num[9]=53
使用冒泡排序排列后的顺序
num[0]=4 num[1]=8 num[2]=12 num[3]=32 num[4]=38 num[5]=47 num[6]=53 num[7]=85 num[8]=87 num[9]=94
 

------分隔线----------------------------
标签(Tag):鸡尾酒排序算法
------分隔线----------------------------
推荐内容
猜你感兴趣
XML 地图 | Sitemap 地图