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

文章分类:Java编程

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

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

        问题

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

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

  1. 经典排序算法 - 鸡尾酒排序Cocktail sort

    经典排序算法 - 鸡尾酒排序Cocktail sort 鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 ...

  2. java 鸡尾酒排序_算法渣-排序-冒泡

    没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺:跟着算法渣一起从零学算法 定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 这个算法的名字由来 ...

  3. 算法 - 鸡尾酒排序(CocktailShaker_sort)

    目录 引言: 什么是鸡尾酒排序(CocktailShaker_sort)? 鸡尾酒排序的排序原理: 鸡尾酒排序的过程演示: Step 1 : Step 2 : Step 3 : Step 4 : St ...

  4. 【数据结构与算法】排序 冒泡、插入、选择 O(n^2)

    冒泡.插入.选择 O(n2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.如何分析一个排序算法? 学习排序算法的思路?明确原理.掌握实现以及分析性能. ...

  5. 排序算法--鸡尾酒排序

    分类: 算法2013-08-14 11:12 142人阅读 评论(0) 收藏 举报 鸡尾酒排序,我不知道为什么会有这么一个名字,但是经过我的学习,我发现叫双向冒泡排序比较合适. 冒泡排序是每一次循环时 ...

  6. 鸡尾酒排序算法c语言源代码,排序算法 -鸡尾酒排序

    简介 鸡尾酒排序是冒泡排序的一种,又称为来回排序.它比冒泡排序要高级点, 冒泡排序的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动.算法的每一轮都是从左到右来比较元素,进行单 ...

  7. 排序算法之【打擂台算法】【冒泡算法】【选择排序】

    目录 博文内容: 本讲讲解排序算法里三种基本算法以及它们之间的区别 ★博文转载请注明出处. 1. 打擂台算法: 实现步骤: 原理: 代码实现: 运行结果: 2. 冒泡算法实现排序: 冒泡法(也叫做起泡 ...

  8. Java实现冒泡算法及优化冒泡算法

    基本思想 冒泡排序(Bubble Sort)通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序(前后大小与要求的顺序不一致)则交换,使值较大的元素逐渐从前移向后部,就象 ...

  9. 排序算法猴子排序java算法代码实现

    <h1>猴子排序</h1> 原理:现有一组未排序数据和相同数量的方格,然后依次随机地取出数据随机地放入方格中,直到把方格放满即止. 之所以又被称为猴子排序,我的猜测是因为.将这 ...

最新文章

  1. Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
  2. fork() 成为负担,需要淘汰
  3. 查表法的CRC8和CRC16程序
  4. 一丶宝塔+青龙面板安装部署教程及命令-依赖库
  5. 你不知道的JavaScript错误和调用栈常识
  6. 数据结构与算法 / 堆结构
  7. hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
  8. org.springframework.http.converter.HttpMessageNotWritableException:
  9. gazebo 直接获取传感器数据_【ROS-Gazebo】IMU插件使用与数据采集——以四足机器人pigot为例...
  10. 【文章】你和自己聊过吗?你很重要
  11. 十大经典排序算法1(Python版本)
  12. python机器学习库sklearn——多类、多标签、多输出
  13. [转载] ml-8-1-聚类( ( Clustering) )
  14. iTerm2配置(rz/sz命令)
  15. php 使用xunsearch--迅搜
  16. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  17. Notepad ++中的一个著名插件FingerText
  18. 微信小程序实现一些优惠券/卡券
  19. 人类和海洋动物的相似之处
  20. pytorch中保存、载入权重

热门文章

  1. 创建阿里云物联网平台
  2. (中兴路由器)无中继的DHCP配置实验
  3. blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器)
  4. 极光推送广告,美名为:日活优化
  5. linux防火墙 33001端口,Linux防火墙基础试题-firewalld
  6. 【AR or VR】浅谈AR和VR的优劣
  7. cesium粒子系统-火灾模拟
  8. Hibernate对象的状态和映射
  9. 操作系统-进程死锁:银行家算法
  10. 前后端开发人员必备Chrome插件