背景介紹: 是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。----- 來自 wikipedia
算法規(guī)則: 由于算法每次都將一個(gè)最大的元素往上冒,我們可以將待排序集合(0...n)看成兩部分,一部分為(k..n)的待排序unsorted集合,另一部分為(0...k)的已排序sorted集合,每一次都在unsorted集合從前往后遍歷,選出一個(gè)數(shù),如果這個(gè)數(shù)比其后面的數(shù)大,則進(jìn)行交換。完成一輪之后,就肯定能將這一輪unsorted集合中最大的數(shù)移動(dòng)到集合的最后,并且將這個(gè)數(shù)從unsorted中刪除,移入sorted中。
代碼實(shí)現(xiàn)(Java版本)
public void sort(int[] args)
{
//第一層循環(huán)從數(shù)組的最后往前遍歷
for (int i = args.length - 1; i > 0 ; --i) {
//這里循環(huán)的上界是 i - 1,在這里體現(xiàn)出 “將每一趟排序選出來的最大的數(shù)從sorted中移除”
for (int j = 0; j < i; j++) {
//保證在相鄰的兩個(gè)數(shù)中比較選出最大的并且進(jìn)行交換(冒泡過程)
if (args[j] > args[j+1]) {
int temp = args[j];
args[j] = args[j+1];
args[j+1] = temp;
}
}
}
}