




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第排序算法圖解之Java冒泡排序及優(yōu)化目錄1.冒泡排序簡介2.圖解算法3.冒泡排序代碼實(shí)現(xiàn)4.冒泡排序算法的優(yōu)化
1.冒泡排序簡介
冒泡排序(BubbleSorting)即:通過對待排序的序列從前往后,依次比較相鄰元素的值,若發(fā)現(xiàn)逆序則交換位置,使較大的元素逐漸移動(dòng)到后部,就像水底的氣泡一樣逐漸從水面冒出來,這就是冒泡名稱的由來
2.圖解算法
以將序列{3,9,-1,10,-20}從小到大排序?yàn)槔?/p>
基本思想就是,在每一趟排序?qū)崿F(xiàn)將最大的數(shù)移到序列的最后端!這主要通過比較相鄰兩個(gè)元素實(shí)現(xiàn),當(dāng)相鄰的兩個(gè)元素逆序的時(shí)候,我們就交換它們。
第1趟排序:
第1趟排序共比較了4次,將最大的數(shù)10冒泡到了序列的尾部。
第2趟排序:
由于第一趟排序已經(jīng)將最大是數(shù)10給冒泡到了最末端,因此在本次排序中,不需要再比較最后一個(gè)元素,故共比較了3次,將子序列(前四個(gè)元素)中最大的數(shù)9(整個(gè)序列中倒數(shù)第二大的數(shù))冒泡到了子序列的尾端(原序列的倒數(shù)第二個(gè)位置)。
第3趟排序:
在第三趟排序時(shí),同理,倒數(shù)兩個(gè)元素位置已經(jīng)確定,即第一、第二大的數(shù)已經(jīng)排好位置,只需要再將倒數(shù)第三大的數(shù)確認(rèn)即可。故比較2次,實(shí)現(xiàn)倒數(shù)第三大的數(shù)3的位置確定。
第4趟排序:
在第四趟排序時(shí),只有第一、第二個(gè)元素的位置還不確定,只需要比較一次,若逆序,則交換即可。到此,排序算法完成,原序列已經(jīng)排序成為一個(gè)遞增的序列!
小結(jié)
一共進(jìn)行了數(shù)組大小-1次趟排序,即外層循環(huán)arr.length-1次;每趟排序進(jìn)行了逐趟減小次數(shù)的比較,即內(nèi)層循環(huán)arr.length-i-1次,i從0依次增加。
3.冒泡排序代碼實(shí)現(xiàn)
參考代碼如下,為了便于觀察結(jié)果,在循環(huán)中添加了相應(yīng)的輸出語句:
importjava.util.Arrays;
*@author興趣使然黃小黃
*@version1.0
*冒泡排序
publicclassBubbleSort{
publicstaticvoidmain(String[]args){
int[]array={3,9,-1,10,-20};
//排序前
System.out.println("排序前:"+Arrays.toString(array));
//冒泡排序
for(inti=0;iarray.length-1;i++){
System.out.println("第"+(i+1)+"趟排序開始!");
for(intj=0;jarray.length-i-1;j++){
//如果前面的數(shù)比后面的數(shù)大,則交換
if(array[j]array[j+1]){
//交換
inttemp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
System.out.println("------第"+(j+1)+"趟排序:"+Arrays.toString(array));
System.out.println("第"+(i+1)+"趟排序完成:"+Arrays.toString(array));
System.out.println("================================================");
//輸出排序后的結(jié)果
System.out.println("排序后:"+Arrays.toString(array));
實(shí)現(xiàn)結(jié)果:
4.冒泡排序算法的優(yōu)化
舉個(gè)例子,將待排序的序列改為:{5,1,2,3,4},用以上算法來處理,觀察一下結(jié)果:
可以發(fā)現(xiàn),當(dāng)?shù)谝惶伺判蚪Y(jié)束的時(shí)候,序列已經(jīng)排序完成:即將5冒泡到了最后,序列實(shí)現(xiàn)了從小到大排序。但是原冒泡排序算法,還是義無反顧的進(jìn)行了數(shù)組大小-1趟排序(我可真是大冤種!)
因此,我們需要嘗試對算法進(jìn)行優(yōu)化!
發(fā)現(xiàn):在冒泡排序的過程中,各個(gè)元素都在不斷的接近自己的位置,如果下一趟比較中沒有進(jìn)行過任何交換,則說明序列已經(jīng)有序,則排序算法已經(jīng)可以返回結(jié)果。因此,考慮在排序算法過程中添加一個(gè)標(biāo)志flag判斷元素是否進(jìn)行過交換,以減少不必要的冤種行為!
優(yōu)化代碼如下:
importjava.util.Arrays;
*@author興趣使然黃小黃
*@version1.0
*冒泡排序優(yōu)化
publicclassBubbleSort{
publicstaticvoidmain(String[]args){
int[]array={5,1,2,3,4};
//排序前
System.out.println("排序前:"+Arrays.toString(array));
booleanflag=false;//用于標(biāo)記是否進(jìn)行了交換,true則說明進(jìn)行了交換,false表示無
//冒泡排序
for(inti=0;iarray.length-1;i++){
System.out.println("第"+(i+1)+"趟排序開始!");
for(intj=0;jarray.length-i-1;j++){
//如果前面的數(shù)比后面的數(shù)大,則交換
if(array[j]array[j+1]){
//交換
flag=true;//標(biāo)記進(jìn)行了交換
inttemp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
System.out.println("------第"+(j+1)+"趟排序:"+Arrays.toString(array));
System.out.println("第"+(i+1)+"趟排序完成:"+Arrays.toString(array));
System.out.println("================================================");
if(!flag){
//如果沒有進(jìn)行交換則直接退出,說明排序已經(jīng)完成
break;
}else{
//回退
flag=false;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)培訓(xùn)中AI與教育心理學(xué)的協(xié)同創(chuàng)新
- 智慧城市環(huán)境管理的技術(shù)創(chuàng)新與實(shí)踐
- 孩子的思維訓(xùn)練與教育心理學(xué)的結(jié)合點(diǎn)
- 多維數(shù)據(jù)隱私保護(hù)-洞察及研究
- 定向搜索在物聯(lián)網(wǎng)安全中的作用與挑戰(zhàn)-洞察闡釋
- 智能玩具市場增長-洞察及研究
- 智能預(yù)測與風(fēng)險(xiǎn)評估-洞察及研究
- 智慧城市管理中的大數(shù)據(jù)分析技術(shù)
- 智慧城市安全網(wǎng)的技術(shù)創(chuàng)新與應(yīng)用推廣
- 湖南省建筑施工企業(yè)安全生產(chǎn)管理人員
- 網(wǎng)格員培訓(xùn)完整資料課件
- 富馬酸奧賽利定注射液-藥品臨床應(yīng)用解讀
- 2024IPv6 技術(shù)要求 第2部分:基于 IPv6 段路由(SRv6)的 IP 承載網(wǎng)絡(luò)
- 新標(biāo)準(zhǔn)日本語初級上冊第七課課練
- 部編初一語文閱讀理解最全答題模板與技巧+專項(xiàng)訓(xùn)練練習(xí)題
- 弟子規(guī)注音A4直接打印版
- 金融學(xué)原理重點(diǎn)總結(jié)彭興韻
- 譯林版三年級英語上冊《全冊課件》ppt
- ma600學(xué)員座艙圖冊用戶培訓(xùn)中心
- 液壓過濾器的設(shè)計(jì)和制造
- 《義務(wù)教育英語課程標(biāo)準(zhǔn)(2022年版)》自測題、綜合測試題、初中英語新課標(biāo)過關(guān)抽測試卷及優(yōu)秀答卷(共17套附答案)
評論
0/150
提交評論