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卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...