c语言鸡尾酒排序的例子,经典算法——鸡尾酒排序(冒泡算法改良)
搞開發的人都需要積累一些經典算法,以備不時之須。
搞開發也有好幾年了,積累的一些算法一直沒做過整理,這段時間無聊就把這些算法整理以下,以備以后之用。算法——————雞尾酒排序。
問題
有一數組,長度為n,把數組中的元素從小到大重新排列。
說明
雞尾酒(cocktail)排序,又叫攪拌(shaker)排序。是改良的冒泡排序,冒泡排
序可見另一篇文章經典算法之冒泡排序。
思路
雞尾酒排序的過程為:(1)先對數組從左到右進行冒泡排序(升序),則最大的元
素去到最右端;(2)再對數組從右到左進行冒泡排序(降序),則最小的元素去到最左
端。以此類推,依次改變冒泡的方向,并不斷縮小未排序元素的范圍。
例如對45 ,19, 77, 81, 13, 28, 18, 19, 77進行排序
從左到右:19,45,77,13,28,18,19,77,81
從右到左:13,19,45,77,18,28,19,77,81
從左到右:13,19,45,18,28,18,77,77,81
從右到左:13,18,19,45,18,28,77,77,81
從左到右:13,18,19,18,28,45,77,77,81
從右到左:13,18,18,19,28,45,77,77,81
這時不再發生交換,排序結束。
具體實現:
package com.jack.arithmetic;
public class CocktailSort {
public static void main(String[] args) {
int[] array = { 10, 3, 5, 31,
37, 5, 0, 9 };
// 對數據排序
sort(array);
for (int el : array) {
System.out.print(el
+ " ");
}
}
static void sort(int[] array) {
int top = array.length -
1;
int bottom = 0;
boolean flag = true;
int i, j;
while (flag) {
flag =
false;
//
從小到大,升序
for (i =
bottom; i < top; i++) {
if
(array[i] > array[i + 1]) {
swap(array,
i, i + 1);
flag
= true;
}
}
top--;
//
從大到小,降序
for (j = top;
j > bottom; j--) {
if
(array[j] < array[j - 1]) {
swap(array,
j, j - 1);
flag
= true;
}
}
bottom++;
}
}
private static void swap(int[] array, int i, int
j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
排序結果:0 3 5 5 9 10 31 37
總結
以上是生活随笔為你收集整理的c语言鸡尾酒排序的例子,经典算法——鸡尾酒排序(冒泡算法改良)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于JavaScript学习,推荐博客及
- 下一篇: 基于微信评选投票小程序系统设计与实现 开