標籤:bubble void rand [] stat 元素 scribe main text
排序演算法之冒泡排序
一、初級的冒泡排序
import java.util.Arrays;
/**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 張富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortLow {
// 起泡排序是快速排序的基礎,但是排序速度較慢。
// 基本思想:將序列中第 1 個元素與第 2 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 再將第 2 個元素與第 3 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 依此類推,直到第 n-1 個元素與第 n 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 經過如此一趟排序,使得 n 個元素的最大值被安置在第 n 個位置上;
// 此後,再對前 n-1 個元素進行同樣的過程,使得該 n-1 個元素的最大值被安置在第 n-1 個位置上;
// 然後再對前 n-2 個元素重複以上的過程... 直到某一趟排序過程中不出現元素交換位置的動作,排序結束。
public static void main(String[] args) {
// 聲明整型數組
int[] array = new int[10];
// 使用迴圈和隨機數初始化數組
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始數組為:");
System.out.println("--------------------------------------");
System.out.println(Arrays.toString(array));
array = bubbleSort(array);
System.out.println("--------------------------------------");
System.out.println("排序後的數組為:");
System.out.println(Arrays.toString(array));
}
/**
*
* 功能:冒泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較,就選出最大的數;經過第2輪比較,就選出次大的數,
* 以此類推。
*
*
* 參數:int[] array
*
* 傳回型別:int[]
*/
private static int[] bubbleSort(int[] array) {
// 使用臨時數組,替代原始數組
int[] arr = array;
for (int i = 0; i < arr.length; i++) {
System.out.println("第 " + (i + 1) + "趟");
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// 列印每一趟的數組
System.out.println(Arrays.toString(arr));
}
return arr;
}
}
二、改良版的冒泡排序
import java.util.Arrays;
/**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 張富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortHigh {
// 起泡排序是快速排序的基礎,但是排序速度較慢。
// 基本思想:將序列中第 1 個元素與第 2 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 再將第 2 個元素與第 3 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 依此類推,直到第 n-1 個元素與第 n 個元素進行比較,如前者大於後者,則兩個元素交換位置,否則不交換;
// 經過如此一趟排序,使得 n 個元素的最大值被安置在第 n 個位置上;
// 此後,再對前 n-1 個元素進行同樣的過程,使得該 n-1 個元素的最大值被安置在第 n-1 個位置上;
// 然後再對前 n-2 個元素重複以上的過程... 直到某一趟排序過程中不出現元素交換位置的動作,排序結束。
public static void main(String[] args) {
// 聲明整型數組
int[] array = new int[10];
// 使用迴圈和隨機數初始化數組
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始數組為:");
System.out.println(Arrays.toString(array));
System.out.println("--------------------------------------");
array = bubbleSort(array);
System.out.println("--------------------------------------");
System.out.println("排序後的數組為:");
System.out.println(Arrays.toString(array));
}
/**
*
* 功能:冒泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較,就選出最大的數;經過第2輪比較,就選出次大的數,
* 以此類推。
*
*
* 參數:int[] array
*
* 傳回型別:int[]
*/
private static int[] bubbleSort(int[] array) {
// 使用臨時數組,替代原始數組
int[] arr = array;
for (int i = 0; i < arr.length; i++) {
System.out.println("第 " + (i + 1) + "趟");
// 交換的標誌,初始值為 false
boolean swap = false;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 如果交換了,交換標誌置為 true
swap = true;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println(Arrays.toString(arr));
// 如果交換標誌為 false,即沒有交換,則跳出最近的迴圈
if (!swap) {
break;
}
}
return arr;
}
}
排序演算法之冒泡排序Java實現