选择法排序
vb吧
全部回复
仅看楼主
level 5
哇丢丢 楼主
原始数据8 6 9 3 2 7
假设a1最小
j从2到6。我对那串代码有两种理解
①那段代码的意思是a2到a6分别比较与a1的大小再换?那3和2的大小就没法排了?
②从a2到a6选出来一个最小的与a1比较再排,如果是这样的话?这串代码是怎么实现这种效果的?
求大佬[委屈]
2021年06月24日 02点06分 1
level 11
已经拍好序的,不管,目前已经排序到第i个。
imin=i,就是假定当前第i个在剩下的里面就是最小的了
然后从i+1往后直到完了将每个数与最小数比较,如果小于当前的最小数a(imin),就记录这个位新的最小数imin=j
这里要注意的就是imin是变化的,所以a(imin)总是当前最小的,既不是你理解的①,而不是②,而是当从i到j这些书里面最小的数,当j到头后就是代表了本轮最小的小数(除去i以前那些,因为那些是已经排好的)。
所以在next j之后imin就是从第i个以后最小的数的位置,将他与第i个交换,即让最小的到最前面,实现排序
2021年06月24日 03点06分 2
level 11
形象一点说。当i=1的时候,
imin=i,即imin=1,a(imin)=8
然后就进入你的红圈,从第2个开始到第6个进行比较。
j=2,a(imin)=8>a(j)=6,所以,执行then后面的imin=j,得到imin=2,就有a(imin)=6
j=3,a(imin)=6<a(j)=9,继续
j=4,a(imin)=6>a(j)=3,执行then后的语句,imin=4,有a(imin)=3
j=5,a(imin)=3>a(j)=2,执行then后 语句,imin=5,a(imin)=2
j=6,a(imin)=2<a(j)=7,继续
next j到这里就执行完了,得到最小值的位置imin=5,a(imin)=2
然后就是你照片以外的代码,将i位置的数字与imin位置的数字交换,,最小的数字就到了第一位。
下面应该是next i,i就成为了2.因为最小的2已经归位,剩下的再重新来一次挑选最小的,放到第2位
…………
直到倒数第2个归位,剩下的一个是最大的在倒数第二个归位时,他也就到了最后。
至此,排序完成。
2021年06月24日 03点06分 3
编程,最关键的是要“抽象思维”,要摆脱本楼层这种“形象思维”进入上一层的“抽象”“形而上”的思维方式。
2021年06月24日 03点06分
我明白了,感谢vlaoda的耐心教导[玫瑰]
2021年06月24日 04点06分
升序选择法排序,是在内循环(j 循环)中,选出未排序的那些数组元素中最小元素的下标;出内循环后,再判断 imin 是否还等于 i 。如果不相等,就进行交换,把最小元素交换到前面去。
2021年06月24日 16点06分
选择法排序的优点是,数组元素的交换次数少,在大型数组的排序过程中,可以节约一些时间。
2021年06月24日 16点06分
1