1. 程式人生 > >Java排序之一【氣泡排序(四種情況)】

Java排序之一【氣泡排序(四種情況)】

Java排序最常見的就是氣泡排序了,最近整理了下,分四種情況:

  1. 升序,先把最大的放在最後面
    bubbleSortByASC_MaxFirst(intArr);

  2. 升序,先把最小的放在最前面
    bubbleSortByASC_MinFirst(intArr);

  3. 降序,先把最小的放在最後面
    bubbleSortByDESC_MinFirst(intArr);

  4. 降序,先從把最大的放在最前面
    bubbleSortByDESC_MaxFirst(intArr);

具體程式碼如下:

/*******************************************************************************
 * @project
: Java_Algorithm * @package: com.burns.java.sort_algorithm * @file: BubbleSort.java * @author: Administrator * @created: 2017年5月16日 * @purpose: * * @version: 1.0 * * Revision History at the end of file. * * Copyright 2017 AcconSys All rights reserved. ******************************************************************************/
package com.burns.java.sort_algorithm; public class BubbleSort { /** * 氣泡排序 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 * 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 * 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。 * * @param numbers * 需要排序的整型陣列 */
public static int[] intArr = { 49, 38, 65, 97, 76, 13, 27, 48 }; public static void main(String[] args) { System.out.println("氣泡排序之前的陣列:"); for (int i : intArr) { System.out.print(i + "、"); } System.out.println(); // 升序,先把最大的放在最後面 // bubbleSortByASC_MaxFirst(intArr); s // 升序,先把最小的放在最前面 // bubbleSortByASC_MinFirst(intArr); // 降序,先把最小的放在最後面 // bubbleSortByDESC_MinFirst(intArr); // 降序,先從把最大的放在最前面 // bubbleSortByDESC_MaxFirst(intArr); System.out.println("氣泡排序之後的陣列:"); for (int i : intArr) { System.out.print(i + "、"); } } /** * 此排序是升序排序,而且是先把最大的先放在最後。所以j最小為0,最大為size - 1 - i。 * * @param numbers */ public static void bubbleSortByASC_MaxFirst(int[] numbers) { int temp = 0; int size = numbers.length; for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - 1 - i; j++) { if (numbers[j] > numbers[j + 1]) // 交換兩數位置 { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } System.out.println("第" + i + "---" + j + "次排序後:==============="); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } System.out.println("第" + i + "次排序後:-----------------"); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } } /** * 此排序是升序排序,而且是先把最小的先放在最前。所以j最小為不大於i,最大為size - 1。 * * @param numbers */ public static void bubbleSortByASC_MinFirst(int[] numbers) { int temp = 0; int size = numbers.length; for (int i = 0; i < size - 1; i++) { for (int j = size - 1; j > i; j--) { if (numbers[j] < numbers[j - 1]) // 交換兩數位置 { temp = numbers[j]; numbers[j] = numbers[j - 1]; numbers[j - 1] = temp; } System.out.println("第" + i + "---" + j + "次排序後:==============="); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } System.out.println("第" + i + "次排序後:-----------------"); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } } /** * 此排序是降序排序,而且是先把最小的先放在最後。所以j最小為0,最大不超過為size-i - 1。 * * @param numbers */ public static void bubbleSortByDESC_MinFirst(int[] numbers) { int temp = 0; int size = numbers.length; for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - 1 - i; j++) { if (numbers[j] < numbers[j + 1]) // 交換兩數位置 { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } System.out.println("第" + i + "---" + j + "次排序後:==============="); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } System.out.println("第" + i + "次排序後:-----------------"); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } } /** * 此排序是升序排序,而且是先把最大的先放在最前。所以j最小為不大於i,最大為size - 1。 * * @param numbers */ public static void bubbleSortByDESC_MaxFirst(int[] numbers) { int temp = 0; int size = numbers.length; for (int i = 0; i < size - 1; i++) { for (int j = size - 1; j > i; j--) { if (numbers[j] > numbers[j - 1]) // 交換兩數位置 { temp = numbers[j]; numbers[j] = numbers[j - 1]; numbers[j - 1] = temp; } System.out.println("第" + i + "---" + j + "次排序後:==============="); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } System.out.println("第" + i + "次排序後:-----------------"); for (int i1 : intArr) { System.out.print(i1 + "、"); } System.out.println(); } } } /******************************************************************************* * <B>Revision History</B><BR> * [type 'revision' and press Alt + / to insert revision block]<BR> * * * * Copyright 2017 AcconSys All rights reserved. ******************************************************************************/