冒泡排序 和 鸡尾酒排序的区别 ?

 一, 冒泡排序 :

代码如下:

 1 package sort;
 2 /**
 3  * 冒泡排序
 4  * @author DHY
 5  * @creation 2018年5月15日
 6  */
 7 
 8 public class BubbleSort {
 9     
10         public void bubble(Integer[] data){
11             
12             for(int i=0;i<data.length;i++){
13                 
14                 for(int j=0;j<data.length-1-i;j++){
15                     if(data[j]>data[j+1]){   //如果后一个数小于前一个数交换
16                         int tmp=data[j];
17                         data[j]=data[j+1];
18                         data[j+1]=tmp;
19                     }
20                 }
21                 
22             }
23             
24         }
25     
26         
27     /**测试代码*/
28     public static void main(String[] args) {
29 
30              Integer[] list={49,38,65,97,76,13,27,14,10};
31              //冒泡排序
32              BubbleSort bs=new BubbleSort();
33              bs.bubble(list);
34              
35              for(int i=0;i<list.length;i++){
36                  System.out.print(list[i]+" ");
37              }
38              System.out.println();
39         }
40 
41     
42 
43 }
View Code


 

二,鸡尾酒排序:

与冒泡排序不同的地方

  鸡尾酒排序,即双向的冒泡排序,等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低(有先后顺序,并非同时;大循环下第一个循环是从开始扫到结束,将最大的归到最后;第二个循环是从倒数第二个位置往开始端扫,将最小的归到开始的位置),而冒泡排序则仅仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次只移动一个项目和。   以排序(49,38,65,97,76,13,27,14,10)为例,鸡尾酒排序只要访问一次序列就可以完成排序,但如果使用冒泡排序需要八次。但是在乱数序列的状态下,鸡尾酒排序和冒泡排序的效率都很差。

 代码如下:

 1 package sort;
 2 public class CocktailSort {
 3     /**测试代码*/
 4     public static void main(String args[]) {  
 5 //        int[] numbers={-1, 0, 50, 44, -90};
 6         int[] numbers={49,38,65,97,76,13,27,14,10};
 7         sort(numbers);
 8         for(int number : numbers) { 
 9             System.out.println(number); 
10         } 
11     }
12     /**鸡尾酒排序*/
13     static void sort(int[] numbers){
14         int temp;
15         int m=0,n=numbers.length-1;
16         while(m<n){
17             for(int i=m; i<n;i++){
18                 if(numbers[i]>numbers[i+1]){
19                     //交换数组中两个数字的位置
20                     temp=numbers[i];
21                     numbers[i]=numbers[i+1];
22                     numbers[i+1]=temp;
23                 }
24             }
25             n--;
26             for(int i=n; i>m;i--){
27                 if(numbers[i]<numbers[i-1]){
28                     //交换数组中两个数字的位置
29                     temp=numbers[i];
30                     numbers[i]=numbers[i-1];
31                     numbers[i-1]=temp;
32                 }
33             }
34             m++;
35         }    
36     }
37 }
View Code
原文地址:https://www.cnblogs.com/william-dai/p/9038808.html