雞尾酒排序

2022-03-31 05:13:35 字數 2629 閱讀 5971

1.什麼是雞尾酒排序

雞尾酒排序,也稱定向氣泡排序、雙氣泡排序、攪拌排序、漣漪排序、來回排序、快樂小時排序,是氣泡排序的一種變形。

2.與氣泡排序的區別

雞尾酒是雙向排序,可以得到較好的排序效能

3.排序過程

舉例:int arr = new ;

第一趟排序(從左到右找到最大值放在最右端):

第一次排序:2和4比較,2小於4,不交換位置: 2 4 1 68 43 21

第二次排序:4和1比較,4大於1,交換位置: 2 1 4 68 43 21

第三次排序:4和68比較,4小於68,不交換位置: 2 1 4 68 43 21

第四次排序:68和43比較,68大於43,交換位置: 2 1 4 43 68 21

第五次排序:68和21比較,68大於21,交換位置: 2 1 4 43 21 68

第二趟排序(從右到左找到最小值放在最左端):

第一次排序:68和21比較,68大於21,不交換位置: 2 1 4 43 21 68

第二次排序:21和43比較,21小於43,交換位置: 2 1 4 21 43 68

第三次排序:21和4比較,21大於4,不交換位置: 2 1 4 21 43 68

第四次排序:4和1比較,4大於1,不交換位置: 2 1 4 21 43 68

第五次排序:1和2比較,1小於2,交換位置: 1 2 4 21 43 68

第三趟排序(從左到右找到第二大值放在倒數第二):

第一次排序:1和2比較,1小於2,不交換位置: 1 2 4 21 43 68

第二次排序:2和4比較,2小於4,交換位置: 1 2 4 21 43 68

第三次排序:4和21比較,4小於21,不交換位置: 1 2 4 21 43 68

第四次排序:21和43比較,21小於43,不交換位置: 1 2 4 21 43 68

第五次排序:43和68比較,43小於68,不交換位置: 1 2 4 21 43 68

第四趟排序(從右到左找到第二小值放在正數第二):

第一次排序:68和43比較,68大於43,不交換位置: 1 2 4 21 43 68

第二次排序:43和21比較,43大於21,不交換位置: 1 2 4 21 43 68

第三次排序:21和4比較,21大於4,不交換位置: 1 2 4 21 43 68

第四次排序:4和2比較,4大於2,不交換位置: 1 2 4 21 43 68

第五次排序:2和1比較,2大於1,不交換位置: 1 2 4 21 43 68

......以此類推,最後排序結果:1 2 4 21 43 68

**如下:

using system;

using system.collections.generic;

namespace 雞尾酒排序

; console.writeline("\n排序前 => \n", string.join(",", list));

list = cocktailsort(list);

console.writeline("\n排序後 => \n", string.join(",", list));

console.read();

}/// /// 雞尾酒排序

///

///

static listcocktailsort(listlist)

}console.writeline("正向排序 => ", string.join(",", list));

//從後到前的排序(降序)

for (int n = list.count - i - 1; n >= i; n--)

}console.writeline("反向排序 => ", string.join(",", list));

}return list;}}

}

優化下雙向氣泡排序,如果沒排序則退出

using system;

using system.collections.generic;

namespace 雞尾酒排序

; console.writeline("\n排序前 => \n", string.join(",", list));

list = cocktailsort(list);

console.writeline("\n排序後 => \n", string.join(",", list));

console.read();

}/// /// 雞尾酒排序

///

///

static listcocktailsort(listlist)

}console.writeline("正向排序 => ", string.join(",", list));

//從後到前的排序(降序)

for (int n = list.count - i - 1; n >= i; n--)

}//當不再有排序,提前退出

if (!issorted)

break;

console.writeline("反向排序 => ", string.join(",", list));

}return list;}}

}

雞尾酒排序

氣泡排序是從陣列的一側到另一側為一輪,根據條件兩兩交換,例如關於氣泡排序中的一組資料3 2 5 4 6 1 8 9 7,優化的氣泡排序在經過六輪之後得到排好的陣列,而雞尾酒排序是一輪次比較兩回 先從左到右比較,如果左邊比右面大,交換位置 然後從右到左比較,左邊比右邊大,交換位置。就用冒泡中的那組數從...

雞尾酒排序

雞尾酒排序是一種定向的氣泡排序,也可以稱為攪拌排序 漣漪排序。是氣泡排序的一種變形。和氣泡排序的區別在於,雞尾酒排序採用了雙向比較並替換的原理。基本原理 第一步 宣告兩個臨時指標left和right,分別指向第乙個元素和最後乙個元素。第二步 每一輪比較時,從right往left方向查詢最大數,放到r...

雞尾酒排序

所謂雞尾酒的排序就是元素比較和交換過程是雙向的,而氣泡排序是單項的,下面先舉個例子來一步一步介紹其排序思想。例如給定陣列元素為2,3,4,5,6,7,8,1 我們按照氣泡排序的思想,排序過程如下 從上面的過程我們可以看出,2 8已經有序,只有1無序,而我們卻要比較七次,才能排序成功。這樣,我們就可以...