05_冒泡排序

package algorithm;

import java.util.Arrays;

/**
 * 冒泡排序:时间复杂度为(1+2+3+4+...+(n-1))~O(n2)
 * 思想:相邻的数不断进行比较交换,使得最小的数不断的浮出水面
 * @author cloud
 * @data 2016年7月18日
 * @version 1.0
 * @description
 */
public class BubbleSort {
    /**
     * 并不是传统的冒泡排序
     * 
     * @param array
     */
    public static void bubbleSortOne(int[] array) {
        int len = array.length;
        for (int i = 0; i < len - 1; i++) {
            for (int j = i + 1; j < len; j++) {
                if (array[j] < array[i]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }

    /**
     * 典型的冒泡排序,小的数从后边往前冒
     * 
     * @param array
     */
    public static void bubbleSortTwo(int[] array) {
        int len = array.length;
        for (int i = 0; i < len; i++) {
            for (int j = len - 1; j > i; j--) {
                // 后边的一个数小于前边的一个数时冒泡,总是比较相邻的两个数
                if (array[j] < array[j - 1]) {
                    int temp = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }

    /**
     * 优化后的冒泡排序,注意flag的位置
     * 
     * @param array
     */
    public static void bubbleSortThree(int[] array) {
        int len = array.length;
        boolean flag = true;// 用于标记是否发生过交换
        for (int i = 0; i < len && flag; i++) {
            flag = false;
            for (int j = len - 1; j > i; j--) {
                if (array[j] < array[j - 1]) {
                    int temp = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = temp;
                    flag = true;
                }
            }
        }

        System.out.println(Arrays.toString(array));
    }

    public static void main(String[] args) {
        int[] array = { 5, 6, 9, 8, 7, 1, 3, 2, 4 };
        bubbleSortOne(array);
        bubbleSortTwo(array);
        bubbleSortThree(array);
    }
}

 

posted @ 2016-07-03 15:21  桃源仙居  阅读(84)  评论(0)    收藏  举报