选择排序在我们日常生活中
·数组:不管在哪一种算法中都要引入数组的概念。
·个人理解数组就是一组固定空间中紧密有序排列的容器,而那些我们需要排列的数字就是容器中的盛放物。
![]() 再举个栗子,宿舍一层楼中按照门牌号顺序排列就可以看成一组数组,而住在里面的同学就是一些数,同学可以交换(在某些条件下),但是宿舍是永远不会动的。 ![]() |
选择排序
选择排序是一种简单直观的排序算法。
·算法核心:挑着排
·代码思路:
(一)假设有序排列的数组a(1)是最大的(但a(1)中的数值可能并不是最大的)
(二)将a(1)中的元素与剩下的所有元素进行比较,比来比去终于找出了真正最大的数值,将数值放在a(1) 中,于是排列的第一个最大值就选出来了 ,第一回合完毕
(三)重复进行过程一,过程二。
认为a(2)是最大的,剩下的数值中最大的元素放在a(2)中。第二回合完毕。
认为a(3)是最大的,剩下的数值中最大的元素放在a(3)中。第三回合完毕。
·
·
·
·
认为a(n-1)是最大的,剩下的数值中最大的元素放在a(n-1)中。第n-1回合完毕。
最后一个元素n与n-1已经在上面比较过了,n即作为最小元素放在最后。
(四)过程结束
·VB语言中选择排序最核心的一段代码:
For i =1 to n-1 ’ 外循环 For j=i+1 to n ’内循环 if a(1)<a(j) then t =a(i) a(i)=a(j) a(j)= t End if next j next i |
·动画演示
选择排序的在各种初始条件下的排序效果如下:
![慢学算法之选择排序 - 13期 李天贵 - 李天贵 廊坊师范学院信息技术提高班十三期](http://img0.ph.126.net/N2LAz1BFXwMmg5kcLB-7nQ==/1997064959864497824.gif)
- 选择排序需要花费 (N – 1) + (N – 2) + … + 1 + 0 = N(N- 1) / 2 ~ N2/2次比较 和 N-1次交换操作。
- 对初始数据不敏感,不管初始的数据有没有排好序,都需要经历N2/2次比较,这对于一些原本排好序,或者近似排好序的序列来说并不具有优势。在最好的情况下,即所有的排好序,需要0次交换,最差的情况,倒序,需要N-1次交换。
- 数据交换的次数较少,如果某个元素位于正确的最终位置上,则它不会被移动。在最差情况下也只需要进行N-1次数据交换,在所有的完全依靠交换去移动元素的排序方法中,选择排序属于比较好的一种。