非科班出身的我家凯,只能通過(guò)堅(jiān)持和努力來(lái)彌補(bǔ)后天的不足程帕,盡量拉小跟同行的差距,所以我打算在跳槽的黃金季節(jié)瞳氓,開(kāi)始寫(xiě)作的第一篇策彤,廢話不多說(shuō),直接進(jìn)入主題--Java常見(jiàn)的冒泡排序法
冒泡排序法(Bubble Sort)是所有排序算法中最簡(jiǎn)單匣摘、最基本的一種店诗。冒泡排序法的思路就是交換排序,通過(guò)相鄰數(shù)據(jù)的交換來(lái)達(dá)到排序目的音榜。
原理:
1庞瘸、對(duì)數(shù)組中的各數(shù)據(jù),依次比較相鄰的兩元素的大小赠叼。
2擦囊、如果前面的數(shù)據(jù)大于后面的數(shù)據(jù),就交換這兩個(gè)數(shù)據(jù)嘴办。經(jīng)過(guò)第一輪的多次比較排序后瞬场,變可把最小的數(shù)據(jù)排好。
3涧郊、再用同樣的方法把剩下的數(shù)據(jù)逐個(gè)進(jìn)行比較贯被,最后便可按照從小到大的順序排好數(shù)組各數(shù)據(jù)的順序。
代碼:
void bubbleSort(int[] datas) {
int temp;
for (int i = 1; i < datas.length; i++) {
for (int j = 0; j < datas.length - i; j++) {
if (datas[j] > datas[j + 1]) {
temp = datas[j];
datas[j] = datas[j + 1];
datas[j + 1] = temp;
}
}
}
}
優(yōu)化方法妆艘,當(dāng)兩兩比較后沒(méi)有發(fā)生交換彤灶,那么在下一次就不用再去比較,所以代碼可以?xún)?yōu)化為
void bubbleSort(int[] datas) {
int temp;
for (int i = 1; i < datas.length; i++) {
boolean flag=true;
for (int j = 0; j < datas.length - i; j++) {
if (datas[j] > datas[j + 1]) {
flag=false;
temp = datas[j];
datas[j] = datas[j + 1];
datas[j + 1] = temp;
}
}
if ( flag )
break;
}
}
這里暫時(shí)不對(duì)時(shí)間復(fù)雜度和空間復(fù)雜度做分析双仍,后續(xù)會(huì)更新該文章枢希。