排序算法 -- 冒泡排序

冒泡排序

将需要排序的列表,从第一位开始,每相临两个元素比较,如果某一位大于(或小于)他的下一位,则交换两个元素位置,直至不能交换。

这种排序的平均时间复杂度是平方级的,效率不高,容易实现。

/**
 * BubbleSort.java
 * 
 * @author   xieyan
 * @date     2013/06/20
 * @version  1.0
 */
package sort;


/**
 * BubbleSort.java
 */
public class BubbleSort {

	/*
	 * 冒泡排序:
	 * 将需要排序的列表,从第一位开始,每相临两个元素比较,如果某一位大于(或小于)他的下一位,则交换两个元素位置。
	 * 直至不能交换。
	 * 
	 * 这种排序的平均时间复杂度是平方级的,效率不高,容易实现
	 */

	/**
	 * bubbleSortAsc
	 * 
	 * <PRE>
	 * 升序
	 * </PRE>
	 * 
	 * @param arr
	 */
	public static int[] bubbleSortAsc(int[] arr) {
		if(arr == null) {
			return null;
		}

		int temp = 0;
		for (int i = arr.length - 1; i > -1; i--) {
			for(int j = 0; j < i; j++) {
				if(arr[j] > arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		return arr;
	}

	/**
	 * bubbleSortDesc
	 * 
	 * <PRE>
	 * 降序
	 * </PRE>
	 * 
	 * @param arr
	 */
	public static int[] bubbleSortDesc(int[] arr) {
		if(arr == null) {
			return null;
		}

		int temp = 0;
		for (int i = arr.length - 1; i > -1; i--) {
			for(int j = 0; j < i; j++) {
				if(arr[j] < arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		return arr;
	}

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

		int[] b = bubbleSortAsc(a);
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
		}

		b = bubbleSortDesc(a);
		for (int i = 0; i <  b.length; i++) {
			System.out.println(b[i]);
		}
	}
}

猜你喜欢

转载自xieyan30.iteye.com/blog/1922613