def?selSort(L):
????for?i?in?range(len(L)?-?1):
????????minIndx?=?i
????????minVal?=?L[i]
????????j?=?i+1
????????while?j?<?len(L):
????????????if?minVal?>?L[j]:
????????????????minIndx?=?j
????????????????minVal?=?L[j]
????????????j?+=?1
????????if?minIndx?!=?i:
????????????temp?=?L[i]
????????????L[i]?=?L[minIndx]
????????????L[minIndx]?=?temp
????????print?L發(fā)現(xiàn)一個(gè)問(wèn)題,感覺(jué)自己有點(diǎn)懵....for循環(huán)下面的while j < len(L)語(yǔ)句和下面的if minIndx != i語(yǔ)句是順序執(zhí)行的還是要等while 循環(huán)break之后再執(zhí)行?如果是while loop break之后在執(zhí)行下面的if,那么就不對(duì)了呀?這是排序算法里面的selection算法,比方一個(gè)L=[3,5,0,9,1],執(zhí)行while通過(guò)判斷語(yǔ)句,minVal不斷被賦值,但是這里沒(méi)有交換數(shù)據(jù),交換數(shù)據(jù)在下面的if中,所以就會(huì)出現(xiàn)重復(fù)元素,那等到while break額時(shí)候,L已經(jīng)不對(duì)了啊,就算到了if也沒(méi)用了。除非while和下面的if?minIndx != i是同時(shí)進(jìn)行。大神來(lái)解答????還有這個(gè)代碼是對(duì)的!但是我想說(shuō)selection算法為什么要寫(xiě)成這樣?其實(shí);這樣寫(xiě)不是更加清爽嗎???def?selection_sort(L):
????for?i?in?range(len(L)):
????????for?j?in?range(i+1,len(L)):
????????????if?L[i]>L[j]:
????????????????L[i],L[j]=L[j],L[i]
????return?L
添加回答
舉報(bào)
0/150
提交
取消