Java经典算法:鸡尾酒排序

开发 后端 算法
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。本文主要介绍的是冒泡排序的改良“产品”——鸡尾酒排序,让我们一起来看。

 

 

排序算法中,冒泡排序是经典。鸡尾酒(cocktail)排序,又叫搅拌(shaker)排序,是改良的冒泡排序。下面是用Java来实现的。

问题:

有一数组,长度为n,把数组中的元素从小到大重新排列。

思路:

鸡尾酒排序的过程为:

(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

这时不再发生交换,排序结束。

核心代码:

 

  1. static void sort(int[] array) {     
  2. int top = array.length - 1;     
  3. int bottom = 0;     
  4. boolean flag = true;     
  5. int i, j;     
  6. while (flag) {     
  7. flag = false;     
  8. //从小到大,升序     
  9. for (i = bottom; i < top; i++) {     
  10. if (array > array[i + 1]) {     
  11. swap(array, i, i + 1);     
  12. flag = true;     
  13. }     
  14. }     
  15. top--;     
  16. //从大到小,降序     
  17. for (j = top; j > bottom; j--) {     
  18. if (array[j] < array[j - 1]) {     
  19. swap(array, j, j - 1);     
  20. flag = true;     
  21. }     
  22. }     
  23. bottom++;     
  24. }     
  25. }     
  26. 全部代码:    
  27. package com.icescut.classic.algorithm;     
  28. public class CocktailSort {     
  29. public static void main(String[] args) {     
  30. int[] array = { 10, -3534, -34509 }; // test data     
  31. sort(array);     
  32. for (int el : array) {     
  33. System.out.print(el + " ");     
  34. }     
  35. }     
  36. static void sort(int[] array) {     
  37. int top = array.length - 1;     
  38. int bottom = 0;     
  39. boolean flag = true;     
  40. int i, j;     
  41. while (flag) {     
  42. flag = false;     
  43. //从小到大,升序     
  44. for (i = bottom; i < top; i++) {     
  45. if (array > array[i + 1]) {     
  46. swap(array, i, i + 1);     
  47. flag = true;     
  48. }     
  49. }     
  50. top--;     
  51. //从大到小,降序     
  52. for (j = top; j > bottom; j--) {     
  53. if (array[j] < array[j - 1]) {     
  54. swap(array, j, j - 1);     
  55. flag = true;     
  56. }     
  57. }     
  58. bottom++;     
  59. }     
  60. }     
  61. private static void swap(int[] array, int i, int j) {     
  62. int tmp = array;     
  63. array = array[j];     
  64. array[j] = tmp;     
  65. }     
  66. }  

 

 

【编辑推荐】

  1. 经典四讲贯通C++排序之一 插入排序
  2. 经典四讲贯通C++排序之二 希尔排序
  3. 经典四讲贯通C++排序之三 交换排序
  4. 经典四讲贯通C++排序之四 选择排序
责任编辑:于铁 来源: 百度空间
相关推荐

2023-03-22 08:00:00

2011-11-04 17:43:13

Web

2014-05-30 09:08:42

排序算法测试

2023-12-11 14:00:00

模型数据

2021-01-19 07:02:26

算法数据结构堆排序

2017-02-13 14:11:09

2014-05-12 17:48:07

帝联CDN世界杯

2023-12-12 08:31:44

智能运维场景

2021-10-31 07:38:37

排序算法代码

2019-08-28 11:08:51

排序算法Java

2021-01-21 05:22:36

排序算法选择

2021-01-26 05:33:07

排序算法快速

2011-04-20 13:56:08

选择排序

2011-04-20 14:19:00

希尔排序

2011-04-20 14:07:37

冒泡排序

2017-07-18 10:50:38

前端JavaScript排序算法

2022-03-10 12:03:33

Python算法代码

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2018-11-14 09:40:05

排序算法Java编程语言
点赞
收藏

51CTO技术栈公众号