Java排序之一【氣泡排序(四種情況)】
阿新 • • 發佈:2019-02-17
Java排序最常見的就是氣泡排序了,最近整理了下,分四種情況:
升序,先把最大的放在最後面
bubbleSortByASC_MaxFirst(intArr);升序,先把最小的放在最前面
bubbleSortByASC_MinFirst(intArr);降序,先把最小的放在最後面
bubbleSortByDESC_MinFirst(intArr);降序,先從把最大的放在最前面
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.
******************************************************************************/