這篇文章主要講解了“如何選擇排序及其優(yōu)化”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何選擇排序及其優(yōu)化”吧!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),泉港企業(yè)網(wǎng)站建設(shè),泉港品牌網(wǎng)站建設(shè),網(wǎng)站定制,泉港網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,泉港網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
我們先來看看最原始的版本
for (int i = 0; i < beg.length - 1; i++) {for (int j = i + 1; j < beg.length; j++) {if (beg[i] >= beg[j]) {int temp = beg[j];beg[j] = beg[i];beg[i] = temp; } } }for (int k = 0; k < beg.length; k++) { System.out.print(beg[k] + ","); }
我們可以發(fā)現(xiàn)外面的循環(huán)每次都是第i個(gè)數(shù)和剩下的length-i-1個(gè)數(shù)做比較
如下圖
優(yōu)化:
每次遍歷找出最大值和最小值,那么我們循環(huán)的次數(shù)就會(huì)少1/2
for (int i = 0; i < (beg.length - 1) / 2; i++) {int min = i;int max = i;for (int j = i + 1; j < beg.length - i; j++) { min = beg[i] >= beg[j] ? j : min; max = beg[i] >= beg[j] ? max : j; }if (min + max == beg.length - 1) {int temp3 = beg[beg.length - 1 - i];beg[beg.length - 1 - i] = beg[i];beg[i] = temp3; } else {int temp = beg[min];int temp2 = beg[max];beg[min] = beg[i];beg[max] = beg[beg.length - 1 - i];beg[i] = temp;beg[beg.length - 1 - i] = temp2; } }for (int k = 0; k < beg.length; k++) { System.out.print(beg[k] + ","); }
最外層遍歷少了1/2 而里層遍歷又少隨著最大值和最小值的縮小而縮小區(qū)間
這里需要考慮一下極值的情況即最大值和最小值剛好交換的情況,如圖中1和9剛好是最大值與最小值
感謝各位的閱讀,以上就是“如何選擇排序及其優(yōu)化”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)如何選擇排序及其優(yōu)化這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!