`

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

阅读更多

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

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

        问题

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

 作者个人博客:www.52cfml.com

1
0
分享到:
评论

相关推荐

    冒泡排序改进算法 /鸡尾酒算法

    为了提高冒泡排序的效率,人们提出了多种改进算法,其中鸡尾酒排序(Cocktail Sort,又称双向冒泡排序)是一种常见的优化策略。 鸡尾酒排序的基本思想是在排序过程中,不仅从左向右进行比较和交换,还会从右向左...

    易语言鸡尾酒排序

    鸡尾酒排序,又称 bidirectional bubble sort 或 cocktail sort,是一种基于冒泡排序的优化算法。在冒泡排序中,元素是按照从最小到最大的顺序逐渐“浮”到数组的前端,而鸡尾酒排序则通过从一端到另一端来回遍历...

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

    本资源包涵盖了五种常见的排序算法:冒泡排序、选择排序、鸡尾酒排序(又称双向冒泡排序)、插入排序以及快速排序。这些排序算法在实际编程中有着广泛的应用,尤其是在处理大量数据时,了解并熟练掌握它们的原理和...

    算法-理论基础- 排序- 鸡尾酒排序(包含源程序).rar

    鸡尾酒排序,又称 bidirectional bubble sort 或者 cocktail sort,是一种变形的冒泡排序算法,因其在排序过程中,数据在数组两端来回扫动,如同调制鸡尾酒时酒液在杯中摇晃,故得此名。在这个压缩包文件中,你将...

    c++鸡尾酒排序算法yu

    鸡尾酒排序,也称为双向冒泡排序,是一种基于冒泡排序的优化算法。冒泡排序的基本思想是通过相邻元素之间的比较和交换,将较大的元素逐渐“冒”到数组的末尾。而鸡尾酒排序则在此基础上进行了改进,它不仅从左向右...

    经典算法的C#源码实现

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

    c#冒泡,选择,鸡尾酒,插入,希尔等排序方法

    本资源集成了五种经典的排序算法:冒泡排序、选择排序、鸡尾酒排序(也称作双向冒泡排序)、插入排序以及希尔排序。以下是对这些排序方法的详细说明: 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,通过重复...

    java交换排序之鸡尾酒排序实现方法

    鸡尾酒排序,又称定向冒泡排序、搅拌排序或涟漪排序,是冒泡排序的一种改进版。它的基本思想是从序列的一端开始,按照升序排列元素,然后从另一端开始,按照降序排列,如此反复,直到整个序列有序。这种排序方式类似...

    易语言鸡尾酒排序源码-易语言

    鸡尾酒排序,又称“震波排序”或“摇摆排序”,是一种变种的冒泡排序算法。在易语言中实现鸡尾酒排序,可以帮助初学者深入理解排序算法的原理和易语言编程技巧。易语言作为一款中国自主研发的编程语言,以其独特的...

    常用排序算法总结

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

    排序算法总结

    - 冒泡排序是最基础的交换排序算法,通过不断比较相邻元素并交换,使得每一轮遍历后最大的元素"冒"到数组末尾。 - 代码实现中的`bubbleSort`函数利用两个嵌套循环,如果发现相邻元素顺序错误则交换,如果一轮遍历...

    算法之排序专题 二分法排序等等

    例如,鸡尾酒排序(也叫双向冒泡排序)或选择排序等。 文章还预告了一个基于模板的通用快速排序实现,这个模板函数可以对任何数据类型进行排序,体现了C++模板的强大之处。 总的来说,排序算法的选择应根据实际...

    JAVA经典算法各种排序算法

    除了这些基本的排序算法,还有希尔排序、鸡尾酒排序(也叫双向冒泡排序)、堆排序、Timsort等更高级的算法。这些算法各有特色,有的注重稳定性,有的追求效率,有的适应于特定类型的数据。 河内塔、老鼠走迷宫、...

    c#实现基本排序算法

    本文将详细探讨C#语言中实现的几种基本排序算法,包括冒泡排序、鸡尾酒排序(双向冒泡)、选择排序、插入排序、希尔排序、堆排序和归并排序。 首先,我们来看**冒泡排序**,它是最简单的排序算法之一。通过不断交换...

    冒泡排序 Java代码

    此外,还可以使用优化的冒泡排序,如鸡尾酒排序(双向冒泡),在每一轮中从两端向中间扫描,进一步提升性能。 总之,冒泡排序是计算机科学中的经典算法,它帮助初学者理解排序的基本思想,同时在特定场景下也可以有...

    常用排序算法介绍_示例程序|排序算法_程序.rar

    12. **堆排序的变种:**如鸡尾酒排序(双向冒泡排序)、 gnome sort(园丁排序)等。 13. **图解排序**:如Timsort,是Python等语言内置的排序算法,结合了插入排序和归并排序的特点,对已部分有序的数据表现优秀。...

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

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

    java 冒泡排序法 PPT文档

    - 也可能涉及冒泡排序的变种,如鸡尾酒排序(双向冒泡排序)等。 通过学习这个PPT,你将能够理解冒泡排序的基本思想,掌握其Java实现,以及在不同场景下的应用和优化。如果你是初学者,这个PPT将帮助你打下坚实的...

    c++实现12个排序算法以及时间比较

    鸡尾酒排序是双向冒泡排序,它从两端向中间交替进行,先从左向右,然后从右向左,使得较小的元素逐渐向左移动,较大的元素向右移动。时间复杂度也为O(n²)。 12. **斯坦纳树排序(Steiner Tree Sort)** 斯坦纳树...

    内部排序小结 包括几乎所有的内部排序算法

    5. 冒泡排序(Bubble Sort)和鸡尾酒排序(Cocktail Sort):两者都是稳定的排序算法,时间复杂度为O(n^2)。冒泡排序通过相邻元素的交换逐步将最大(或最小)元素移到序列末尾。鸡尾酒排序是冒泡排序的变种,双向...

Global site tag (gtag.js) - Google Analytics