raptor五个数排序流程图_经典算法系列之:选择排序
1、前言
算法,在計(jì)算機(jī)中的地位,就相當(dāng)于人類大腦的決策中樞系統(tǒng),哪怕最簡(jiǎn)單的算法,其精妙的思維方式,都可以讓人開(kāi)啟一扇新的視窗。
算法,它不僅僅只是狹義的用來(lái)解決計(jì)算機(jī)科學(xué)領(lǐng)域的問(wèn)題,更是一種“思維方式”。算法思維,是一種深度思考和創(chuàng)造的過(guò)程。
算法,只有真正理解了,而不只是所謂的知道,并將應(yīng)用到生活、工作、學(xué)習(xí)等各個(gè)方面,它將一定使人受益終生。
2、原理推導(dǎo)
選擇排序,就是選擇一個(gè)固定的元素與之后的元素依次比較,把小的元素往前調(diào)或者把大的元素往后調(diào),實(shí)現(xiàn)元素的順序排列。
給定一組 {9,7,1,5,8,6} 的原始無(wú)序數(shù)組,按照從小到大升序排列。
#step1
第一個(gè)數(shù)字【9】和第二、三、四、五、六個(gè)數(shù)字依次比較,得出最小數(shù)字1,然后數(shù)字 【1】 和 【9】 位置互換,完成第一輪排序。
#step2
第二個(gè)數(shù)字【7】和第三、四、五、六個(gè)數(shù)字依次比較,得出最小數(shù)字5,然后 【5】 和 【7】 位置互換,完成第二輪排序。
#step3
第三個(gè)數(shù)字【9】和第四、五、六個(gè)數(shù)字依次比較,得出最小數(shù)字6,然后 【6】 和 【9】 位置互換,完成第三輪排序。
#step4
第四個(gè)數(shù)字【7】和第五、六個(gè)數(shù)字依次比較,得出最小數(shù)字7,數(shù)字 【7】 和 【8】 位置不需要互換,完成第四輪排序。
#step5
第五個(gè)數(shù)字【8】和第六個(gè)數(shù)字依次比較,得出最小數(shù)字8,數(shù)字【8】 和 【9】 位置不需要互換,完成第五輪排序。
至此,選擇排序已經(jīng)完成結(jié)果為:{1,5,6,7,8,9} ,我們可以看到step4順序已經(jīng)排好了,但程序并不知道,所以還會(huì)接著繼續(xù)比較直到最后。
3、代碼示例
# 第一種實(shí)現(xiàn),每次比對(duì)只要符合條件,馬上交換兩個(gè)元素位置
public static void chooseSortOne(int array[]){ //外層循環(huán)控制總次數(shù) for (int i=0;i<array.length-1;i++){ //內(nèi)層循環(huán)控制單個(gè)元素比較次數(shù) for (int j=i+1;j<array.length;j++){ //選擇每次從索引【i】開(kāi)始,分別與后面的其他元素比較,不是相鄰的兩個(gè)數(shù)相比較 if(array[i] > array[j]){ //每次比較滿足條件,進(jìn)行位置交換 swapPosition(array, j, i); } } } }# 第二種實(shí)現(xiàn),每次比對(duì)符合條件,不進(jìn)行位置交換,只記錄需要交換的索引,到一輪比較結(jié)束再交換位置
public static void chooseSortTwo(int array[]){ //交換索引 int index = 0; //外層循環(huán)控制總次數(shù) for (int i=0;i<array.length-1;i++){ //每次從【i】開(kāi)始,index根據(jù)比較結(jié)果,更新索引位置 index = i; //選擇每次從索引【index】開(kāi)始,分別與后面的其他元素比較,不是相鄰的兩個(gè)數(shù)相比較 for (int j=i+1;j<array.length;j++){ if(array[index] > array[j]){ //滿足條件時(shí)不進(jìn)行位置交換,只記錄索引,下次比較以新的索引為起始位置 index = j; } } //一輪循環(huán)結(jié)束,再將兩個(gè)數(shù)的索引位置互換,節(jié)省交換次數(shù),提高排序效率 swapPosition(array, index, i); } }# 元素交換方法
public static void swapPosition(int array[], int indexA, int indexB){ int temp = array[indexA]; array[indexA] = array[indexB]; array[indexB] = temp; }4、禪定時(shí)刻
選擇排序的精妙之處不在于選擇一個(gè)元素依次比較,而在于對(duì)他的優(yōu)化處理,比較而不交換,一個(gè)小的調(diào)整,在數(shù)據(jù)量級(jí)不大的時(shí)候,難以體現(xiàn)它的優(yōu)勢(shì),一旦數(shù)據(jù)量級(jí)超過(guò)一定的界限,運(yùn)算效率的速度就相差巨大。
一個(gè)產(chǎn)品創(chuàng)造過(guò)程中,我們遇到常規(guī)的問(wèn)題,用常規(guī)的解決方案可以應(yīng)付,如果能養(yǎng)成習(xí)慣多一份思考,在此基礎(chǔ)上持續(xù)改進(jìn),優(yōu)化實(shí)現(xiàn)方法,日積月累這就形成了個(gè)人和企業(yè)的護(hù)城河,增強(qiáng)個(gè)人和企業(yè)在社會(huì)中的競(jìng)爭(zhēng)力。
作者簡(jiǎn)介
思維的持續(xù),一個(gè)真的有思想,不穿格子襯衫的程序員。
總結(jié)
以上是生活随笔為你收集整理的raptor五个数排序流程图_经典算法系列之:选择排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 刷新存储器的容量单位是什么_GD25Q8
- 下一篇: hive解决数据倾斜问题_Hive数据倾