返回首頁
當前位置: 主頁 > 網絡編程 > Jsp實例教程 >

Java實現雞尾酒排序算法

時間:2013-05-02 21:56來源:知行網www.wtckvq.live 編輯:麥田守望者

雞尾酒排序又叫定向冒泡排序,來回排序,漣漪排序,攪拌排序,快樂小時排序,他其實是冒泡排序的一種變形。它和冒泡排序的不同之處就在于:冒泡排序是單向進行的,而雞尾酒排序是以雙向在序列中進行排序的。
 

雞尾酒算法原理

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):雞尾酒排序算法
------分隔線----------------------------
推薦內容
猜你感興趣
深蓝海域APP