经典算法——鸡尾酒排序(冒泡算法改良)
经典算法——鸡尾酒排序(冒泡算法改良)
文章分类: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
经典算法——鸡尾酒排序(冒泡算法改良)相关推荐
- 经典排序算法 - 鸡尾酒排序Cocktail sort
经典排序算法 - 鸡尾酒排序Cocktail sort 鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 ...
- java 鸡尾酒排序_算法渣-排序-冒泡
没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺:跟着算法渣一起从零学算法 定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 这个算法的名字由来 ...
- 算法 - 鸡尾酒排序(CocktailShaker_sort)
目录 引言: 什么是鸡尾酒排序(CocktailShaker_sort)? 鸡尾酒排序的排序原理: 鸡尾酒排序的过程演示: Step 1 : Step 2 : Step 3 : Step 4 : St ...
- 【数据结构与算法】排序 冒泡、插入、选择 O(n^2)
冒泡.插入.选择 O(n2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.如何分析一个排序算法? 学习排序算法的思路?明确原理.掌握实现以及分析性能. ...
- 排序算法--鸡尾酒排序
分类: 算法2013-08-14 11:12 142人阅读 评论(0) 收藏 举报 鸡尾酒排序,我不知道为什么会有这么一个名字,但是经过我的学习,我发现叫双向冒泡排序比较合适. 冒泡排序是每一次循环时 ...
- 鸡尾酒排序算法c语言源代码,排序算法 -鸡尾酒排序
简介 鸡尾酒排序是冒泡排序的一种,又称为来回排序.它比冒泡排序要高级点, 冒泡排序的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动.算法的每一轮都是从左到右来比较元素,进行单 ...
- 排序算法之【打擂台算法】【冒泡算法】【选择排序】
目录 博文内容: 本讲讲解排序算法里三种基本算法以及它们之间的区别 ★博文转载请注明出处. 1. 打擂台算法: 实现步骤: 原理: 代码实现: 运行结果: 2. 冒泡算法实现排序: 冒泡法(也叫做起泡 ...
- Java实现冒泡算法及优化冒泡算法
基本思想 冒泡排序(Bubble Sort)通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序(前后大小与要求的顺序不一致)则交换,使值较大的元素逐渐从前移向后部,就象 ...
- 排序算法猴子排序java算法代码实现
<h1>猴子排序</h1> 原理:现有一组未排序数据和相同数量的方格,然后依次随机地取出数据随机地放入方格中,直到把方格放满即止. 之所以又被称为猴子排序,我的猜测是因为.将这 ...
最新文章
- Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
- fork() 成为负担,需要淘汰
- 查表法的CRC8和CRC16程序
- 一丶宝塔+青龙面板安装部署教程及命令-依赖库
- 你不知道的JavaScript错误和调用栈常识
- 数据结构与算法 / 堆结构
- hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
- org.springframework.http.converter.HttpMessageNotWritableException:
- gazebo 直接获取传感器数据_【ROS-Gazebo】IMU插件使用与数据采集——以四足机器人pigot为例...
- 【文章】你和自己聊过吗?你很重要
- 十大经典排序算法1(Python版本)
- python机器学习库sklearn——多类、多标签、多输出
- [转载] ml-8-1-聚类( ( Clustering) )
- iTerm2配置(rz/sz命令)
- php 使用xunsearch--迅搜
- nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
- Notepad ++中的一个著名插件FingerText
- 微信小程序实现一些优惠券/卡券
- 人类和海洋动物的相似之处
- pytorch中保存、载入权重