Java经典算法:鸡尾酒排序
创始人
2024-07-26 10:01:28
0

 

 

排序算法中,冒泡排序是经典。鸡尾酒(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, -3, 5, 34, -34, 5, 0, 9 }; // 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++排序之四 选择排序

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...