冒泡排序
冒泡排序(Bubble Sort)可以稱的上是最為經典的排序算法。它的思路比較簡單,即從後向前,逐個比較相鄰的兩項,尋找最優值(最大或最小),使得該值始終向着我們所需要的方向前進,直到最優值達到它的目的地為止。(為友善起見,我這裡統一都讨論順序排序——從小到大排序,即每一輪都尋找最小的元素放在隊列的前端位置。)第一輪比較即獲得最小的元素放在隊列的第一個位置,第二輪比較獲得除最小元素外的所剩餘的元素的最小值(即次小者)放在隊列的第二個位置,以此類推。
下面給出Java代碼
package sort.bubble;
public class BubbleSort {
/**
* @param args
*/
public static void main(String[] args) {
//設定元素個數
int count = 0;
//獲得随機可重複元素組
//int[] data = createData(count);
//随機不可重複元素組
int[] data = createNoRepeatData(count);
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
//冒泡排序
bubbleSort(data);
System.out.println("\r\n" + "=================");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
/**
* 冒泡算法
* @param data
* @return
*/
private static void bubbleSort(int[] data) {
if (null == data || data.length <= 1) {
return;
}
for (int i = 0; i < data.length; i++) {
//從後向前,相鄰兩項進行比較
for (int j = data.length-1; j > i; j--) {
if(data[j-1]>data[j]){
swap(data,j-1,j);
}
}
}
}
/**
* 數組内 i 坐标元素與 j 坐标元素互換
* @param data
* @param i
* @param j
*/
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
/**
* 獲得随機不可重複數組
* @param data
* @param count
* @return
*/
private static int[] createNoRepeatData(int count) {
int[] data = new int[count];
int randomNum = 0;
boolean isExist = false;
for (int i = 0; i < data.length; i++) {
while (true) {
randomNum = (int) Math.round(Math.random()*count);
isExist = false;
for (int j = 0; j < i; j++) {
if (data[j] == randomNum) {
isExist = true;
break;
}
}
if (!isExist) {
data[i] = randomNum;
break;
}
}
}
return data;
}
/**
* 獲得随機可重複數組
* @param data
* @param count
* @return
*/
private static int[] createData(int count) {
int[] data = new int[count];
for (int i = 0; i < data.length; i++) {
data[i] = (int) Math.round(Math.random()*count);
}
return data;
}
}