一, 冒泡排序 :
代码如下:
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 }
二,鸡尾酒排序:
与冒泡排序不同的地方
鸡尾酒排序,即双向的冒泡排序,等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低(有先后顺序,并非同时;大循环下第一个循环是从开始扫到结束,将最大的归到最后;第二个循环是从倒数第二个位置往开始端扫,将最小的归到开始的位置),而冒泡排序则仅仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次只移动一个项目和。 以排序(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 }