自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java經(jīng)典算法:雞尾酒排序

開發(fā) 后端 算法
排序是計(jì)算機(jī)內(nèi)經(jīng)常進(jìn)行的一種操作,其目的是將一組“無序”的記錄序列調(diào)整為“有序”的記錄序列。本文主要介紹的是冒泡排序的改良“產(chǎn)品”——雞尾酒排序,讓我們一起來看。

 

 

排序算法中,冒泡排序是經(jīng)典。雞尾酒(cocktail)排序,又叫攪拌(shaker)排序,是改良的冒泡排序。下面是用Java來實(shí)現(xiàn)的。

問題:

有一數(shù)組,長度為n,把數(shù)組中的元素從小到大重新排列。

思路:

雞尾酒排序的過程為:

(1)先對數(shù)組從左到右進(jìn)行冒泡排序(升序),則最大的元素去到最右端;

(2)再對數(shù)組從右到左進(jìn)行冒泡排序(降序),則最小的元素去到最左端。

以此類推,依次改變冒泡的方向,并不斷縮小未排序元素的范圍。

例如:對45 ,19, 77, 81, 13, 28, 18, 19, 77進(jìn)行排序

從左到右: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

這時不再發(fā)生交換,排序結(jié)束。

核心代碼:

 

  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. 經(jīng)典四講貫通C++排序之一 插入排序
  2. 經(jīng)典四講貫通C++排序之二 希爾排序
  3. 經(jīng)典四講貫通C++排序之三 交換排序
  4. 經(jīng)典四講貫通C++排序之四 選擇排序
責(zé)任編輯:于鐵 來源: 百度空間
相關(guān)推薦

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

模型數(shù)據(jù)

2021-01-19 07:02:26

算法數(shù)據(jù)結(jié)構(gòu)堆排序

2014-05-12 17:48:07

帝聯(lián)CDN世界杯

2017-02-13 14:11:09

2023-12-12 08:31:44

智能運(yùn)維場景

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

排序算法快速

2017-07-18 10:50:38

前端JavaScript排序算法

2022-03-10 12:03:33

Python算法代碼

2011-04-20 14:07:37

冒泡排序

2011-04-20 13:56:08

選擇排序

2011-04-20 14:19:00

希爾排序

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2018-11-14 09:40:05

排序算法Java編程語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號