一、基本思路:
冒泡排序是一種簡單的交換類排序。其基本思路是,從頭開始掃描待排序的元素,在掃描過程中依次對相鄰元素進行比較,將關鍵字值大的元素後移。每經過一趟排序後,關鍵字值最大的元素將移到末尾,此時記下該元素的位置,下一趟排序只需要比較到此位置為止,直到所有元素都已有序排列。
一般地,對n個元素進行冒泡排序,總共需要進行n-1趟。第1趟需要比較n-1次,第2趟需要比較n-2次,……第i趟需要比較n-i次。 二、4種演算法實現
package com.struct.array;/** * @描述 數組排序 * @項目名稱 Java_DataStruct * @包名 com.struct.array * @類名 ArraySort * @author chenlin * @date 2010年6月22日 下午8:28:46 */public class ArraySort { /** * 相鄰的兩個值對比 * * @param arr */ public static void bubbleSort1(long[] arr) { for (int i = 0; i < arr.length - 1; i++) { // 最多做n-1趟排序 for (int j = 0; j < arr.length - 1 - i; j++) { // 對當前無序區間arr[0......length-i-1]進行排序(j的範圍很關鍵,這個範圍是在逐步縮小的) if (arr[j] > arr[j + 1]) { // 把小的值交換到後面 arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } } list(arr); } /** * 相鄰的兩個值對比 * * @param arr */ public static void bubbleSort2(long[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { arr[j] = arr[j] + arr[j + 1]; arr[j + 1] = arr[j] - arr[j + 1]; arr[j] = arr[j] - arr[j + 1]; } } } list(arr); } /** * 相鄰的兩個值對比 * * @param arr */ public static void bubbleSort3(long[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { long temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } list(arr); } /** * 相鄰的兩個值對比 * * @param arr */ public static void bubbleSort4(long[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = arr.length - 1 - i; j > 0; j--) { if (arr[j] < arr[j - 1]) { long temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } list(arr); } public static void list(long[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(""); } public static void main(String[] args) { long arr[] = { 22, 33, 44, 11, 23, 43, 54, 0, 98 }; bubbleSort4(arr); }}