`

经典算法——鸡尾酒排序(冒泡算法改良)

阅读更多

        搞开发的人都需要积累一些经典算法,以备不时之须。

        搞开发也有好几年了,积累的一些算法一直没做过整理,这段时间无聊就把这些算法整理以下,以备以后之用。  算法——————鸡尾酒排序

        问题

  有一数组,长度为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;

/**
 * 鸡尾酒排序
 * @author jack
 *
 */
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 + " ");
  }
 }

 /**
  * 排序处理部分
  * @param array
  */
 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++;
  }
 }

 /**
  * 数据替换部分
  * @param array 给定的数组
  * @param i 代替换下标
  * @param j 替换部分下标
  */
 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#源码实现

    经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳...

    java数据结构算法 冒泡 选择 鸡尾酒 插入 快速 排序算法

    自己动手写的数据结构算法,希望能帮到大家。几乎每一句都有注释

    常用排序算法总结

    常用排序算法总结,包含:冒泡排序、鸡尾酒排序、选择排序、插入排序、二分插入排序、希尔排序、归并排序、堆排序、快速排序等排序算法总结。

    c#实现基本排序算法

    用c#语言重写的基本排序算法,里面包含冒泡排序,鸡尾酒排序(双向冒泡),选择排序,插入排序,希尔排序,堆排序,归并排序这几个排序算法。程序可以直接运行。

    jQuery实现冒泡、插入排序算法动画演示

    今天我们来分享一款绝对让你震撼的jQuery插件,它可以模拟各种排序算法的动画,让你很直观的了解各种排序算法实现的原理,如果你纯粹想看排序算法动画,那么...这里提供了插入排序、冒泡排序、鸡尾酒排序这三种动画。

    易语言排序算法演示

    易语言排序算法演示源码,排序算法演示,初始化乱序,保存结果,默认排序,冒泡排序,插入排序,鸡尾酒排序,选择排序,双向选择排序,基数排序,鸽巢排序,快速排序,快速排序子程序

    排序算法基础、改进综合

    //定向冒泡[鸡尾酒]排序 //选择排序 //改进的选择排序 //直接插入排序 //二分插入排序 //希尔排序 //自顶向下地归并排序 //自底向上地归并排序 //堆排序 //快速排序 //改进的快速排序:三向切分快速排序

    android基础算法实现

    查找算法:实现了顺序查找,...排序算法:实现了冒泡排序、鸡尾酒排序、插入排序、桶排序、计数排序、归并排序、鸽巢排序、基数排序、地精排序、图书馆排序、选择排序、希尔排序、堆排序、快速排序、内省排序、耐心排序

    14种经典排序算法C程序(强烈推荐)

    鸡尾酒排序(双向冒泡排序)CockTailSort(int *array, int length) 或 BiDirectionalSort(int *array, int length) 3.快速排序 QuickSort(int *array, int length) 归并排序(MergeSort.h) 1.归并排序 MergeSort...

    排序方法:十几种常用排序算法的MATLAB实现-matlab开发

    1) 冒泡排序2)桶排序3) 鸡尾酒排序4) 梳状排序5) 计数排序6) 堆排序7) 插入排序8) 归并排序9) 快速排序10) 基数排序11) 选择排序12) 壳排序 代码的编写方式使得它可以很容易地翻译成其他语言(例如,每个实现在 C++...

    简单排序方法:本次提交包括四种排序算法和一个测试演示。-matlab开发

    算法包括冒泡排序算法、鸡尾酒排序算法、插入排序算法和奇偶排序算法。 这些算法接收一个向量并对向量的元素进行排序并将其返回到一个输出向量中。 例如使用冒泡排序算法,您可以执行以下操作: &gt;&gt; A = rand(1,100)...

    Java实现几种常见排序方法-直插、冒泡、选择、快排、堆排等

    日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一...

    TheAlgorithms-Python:算法Python

    算法-Python 用Python实现的所有算法(用于教育) 这些实现是出于演示目的。 它们的效率不如Python标准库中的实现。 排序算法 气泡排序 冒泡排序(有时也称为... 鸡尾酒摇床排序(也称为双向气泡排序,鸡尾酒排序,摇

    Disorder:Python 中实现的不同排序算法

    鸡尾酒排序 如何? 打开文件“timing.py”并运行它。 如果要对排序算法进行任何更改,则需要打开文件“Disorder.py”。 兼容性 该程序兼容 Python 2.x 和 Python 3.x ##Dependencies 此项目没有依赖项。 它运行在...

    为什么说Python可以实现所有的算法

    今天推荐一个Python学习的干货。 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万。 这个项目主要包括两部分内容:一是各种算法的基本原理...鸡尾酒排序算法 鸡尾酒(Cocktai

    SortingAlgorithms:排序算法的教育实现

    中的函数也标明了每个算法的编码): 冒泡排序 - ordBurbuja() 改进的冒泡排序 - ordBurbujaMejorado() 选择排序 - ordSeleccion() 插入排序 - ordInsercion() 摇床排序(也称为鸡尾酒排序) - ordSacudida() 外壳...

    leetcode答案-leetcode:我的leetcode答案

    鸡尾酒调酒器排序 双向冒泡排序 梳状排序 收缩因子,消灭海龟 计数排序 —— 侏儒排序 被称为愚蠢的排序 堆排序 树排序 插入排序 对(相当)小数据集有效 归并排序 分治算法 奇偶排序 砖类 快速排序 选择排序 壳排序

    Sorting-Algorithm-Visualizer

    排序算法可视化工具 基本思想 有时很难概念化算法在做什么,因此进行可视...按“ c”查看鸡尾酒排序 按“ g”查看“侏儒排序” 按“ q”退出程序 排序算法 1.气泡排序 2.选择排序 3.合并排序 4.鸡尾酒排序 5.侏儒排序

    JS算法题之查找数字在数组中的索引位置

    它有各种各样的种类:冒泡排序、希尔排序、分块块排序,梳排序,鸡尾酒排序,侏儒排序 —— 这些可不是我瞎编的! 这个算法题能够让我们一睹精彩的世界。我们必须对数字数组进行升序排序,并找出给定数字在该数组中...

Global site tag (gtag.js) - Google Analytics