冒泡排序是一種簡(jiǎn)單的交換類(lèi)排序潜叛。其基本思路是秽褒,從頭開(kāi)始掃描待排序的元素,在掃描過(guò)程中依次對(duì)相鄰元素進(jìn)行比較威兜,將關(guān)鍵字值大的元素后移销斟。每經(jīng)過(guò)一趟排序后,關(guān)鍵字值最大的元素將移到末尾牡属,此時(shí)記下該元素的位置票堵,下一趟排序只需要比較到此位置為止,直到所有元素都已有序排列逮栅。
圖解冒泡排序
與插入排序一樣悴势,需要進(jìn)行冒泡排序的數(shù)組也分為已排序部分和未排序部分。
冒泡排序的規(guī)則為:從數(shù)組末尾開(kāi)始依次比較相鄰的兩個(gè)元素措伐,如果大小關(guān)系相反則交換位置特纤,直到數(shù)組中不再有順序相反的相鄰元素。
我們對(duì)數(shù)組 a={5,3,2,4,1} 進(jìn)行從小到大排序侥加,排序過(guò)程如下所示捧存。
第一輪排序:
我們將數(shù)組末尾的a[4]的值和a[3]的值進(jìn)行對(duì)比,發(fā)現(xiàn)a[4]的值比a[3]的值小担败,則將它們交換昔穴,再接著對(duì)剩下的相鄰的兩個(gè)元素進(jìn)行對(duì)比和交換,最終得到的結(jié)果為a={1,5,3,2,4}提前,已排序的部分的元素為1吗货。
第二輪排序:
首先對(duì)比a[3]和a[4]的值,發(fā)現(xiàn)a[3]的值比a[4]的值小狈网,則不需要進(jìn)行排序宙搬。最終得到的結(jié)果為a={1,2,5,3,4}笨腥,已排序部分的元素為1、2勇垛。
第三輪排序:
同上面脖母,經(jīng)過(guò)第三輪排序,已排序部分的元素為1闲孤、2谆级、3。
第四輪排序:
經(jīng)過(guò)四輪排序我們最終得到的結(jié)果為a={1,2,3,4,5}
實(shí)現(xiàn)冒泡排序
實(shí)現(xiàn)插入排序時(shí)崭放,我們要先定義兩個(gè)變量哨苛,i為循環(huán)變量,表示未排序部分的開(kāi)頭元素币砂,從數(shù)組開(kāi)頭向末尾移動(dòng)。j也為循環(huán)變量玻侥,用于對(duì)未排序部分中相鄰元素兩兩比較决摧,從數(shù)組的末尾n-1開(kāi)始減小到 i 結(jié)束(i=1)。