文章目录
一、视频讲解选择排序
本期视频有图文专栏||【视频+图文+动画】详解选择排序
二、选择排序的思想
思想:(注:n为数组长度)
第一次交换中:
- 假定最小数是arr[0]
- 从arr[1]-arr[n-1]找最小值与arr[0]交换。
- 交换过后arr[0]位置上的数确定
第二次交换中:
- 假定最小数是arr[1],
- 从arr[2]-arr[n-1]找最小值与arr[1]交换。
- 交换过后arr[1]位置上的数确定
以此类推…
三、选择排序的动画演示及思路分析
动画演示:
- 粉色的数字:假定的最小值,
- 绿色的数字:需与假定最小值比较的数,
- 橘色的数字:位置固定的数字【位置一旦固定,不参与下次排序】
思路分析:
以7,3,22,15,8为例:n为数组长度
1.第一次交换:3的位置被固定
- 粉色的数字:假定的最小值,
- 绿色的数字:需与假定最小值比较的数,
- 橘色的数字:位置固定的数字【位置一旦固定,不参与下次排序】
(1)假定最小数是arr[0]即min=arr[0]=7
(2) 从arr[1]-arr[n-1]找最小值(即从【3,22,15,8】找最小值)与arr[0]交换。
min=7和arr[1]=3比较: 若min>arr[1],min=arr[1],进行下一次比较
- 因为7>3
- 所以min=arr[1]=3
- 进行下一次比较
7 3 22 15 8 ⇒7 3 22 15 8
min=3和arr[2]=22比较:若min>arr[2],min=arr[2],进行下一次比较
- 因为3<22
- 所以min=arr[1]=3
- 进行下一次比较
7 3 22 15 8 ⇒7 3 22 15 8
min=3和arr[3]=15比较:若min>arr[3],min=arr[3],进行下一次比较
- 因为3<15
- 所以min=arr[1]=3
- 进行下一次比较
7 3 22 15 8 ⇒7 3 22 15 8
min=3和arr[4]=8比较: 若min>arr[4],min=arr[4],结束第一轮比较
- 因为3<8
- 所以min=arr[1]=3
7 3 22 15 8 ⇒7 3 22 15 8
此时找到了【3,22,15,8】中的最小值:3
所以arr[0]=7和arr[1]=3交换位置
(3)交换过后arr[0]=3位置上的数确定:7 3 22 15 8 ⇒ 3 7 22 15 8
2.第二次交换:7的位置被固定
-
粉色的数字:假定的最小值,
-
绿色的数字:需与假定最小值比较的数,
-
橘色的数字:位置固定的数字【位置一旦固定,不参与下次排序】
(1)假定最小数是arr[1]即min=arr[1]=7
(2) 从arr[2]-arr[n-1]找最小值(即从【22,15,8】找最小值)与arr[1]交换。
min=7和arr[2]=22比较:若min>arr[2],min=arr[2],进行下一次比较
- 因为7<22
- 所以min=arr[1]=7
- 进行下一次比较
3 7 22 15 8 ⇒ 3 7 22 15 8
min=7和arr[3]=15比较:若min>arr[3],min=arr[3],进行下一次比较
- 因为7<15
- 所以min=arr[1]=7
- 进行下一次比较
3 7 22 15 8 ⇒ 3 7 22 15 8
min=3和arr[4]=8比较: 若min>arr[4],min=arr[4],结束第一轮比较
- 因为3<8
- 所以min=arr[1]=3
3 7 22 15 8 ⇒ 3 7 22 15 8
此时因为 【22,15,8】 中的数都大于 min=arr[1]=7
所以最小值:min=arr[1]=7
(3)本轮不发生交换 arr[1]=7位置上的数确定:3 7 22 15 8⇒ 3 7 22 15 8
3.第三次交换:8的位置被固定
-
粉色的数字:假定的最小值,
-
绿色的数字:需与假定最小值比较的数,
-
橘色的数字:位置固定的数字【位置一旦固定,不参与下次排序】
(1)假定最小数是arr[2]即min=arr[2]=22
(2) 从arr[3]-arr[n-1]找最小值(即从【15,8】找最小值)与arr[2]交换。
min=22和arr[3]=15比较:若min>arr[3],min=arr[3],进行下一次比较
- 因为22>15
- 所以min=arr[3]=15
- 进行下一次比较
3 7 22 15 8 ⇒ 3 7 22 15 8
min=15和arr[4]=8比较: 若min>arr[4],min=arr[4],结束第一轮比较
- 因为15>8
- 所以min=arr[4]=8
3 7 22 15 8 ⇒ 3 7 22 15 8
此时找到了【22,15,8】中的最小值:8
所以arr[2]=22和arr[4]=8交换位置
(3)交换过后arr[2]=8位置上的数确定: 3 7 22 15 8⇒ 3 7 8 15 22
4.第四次交换:15的位置被固定
-
粉色的数字:假定的最小值,
-
绿色的数字:需与假定最小值比较的数,
-
橘色的数字:位置固定的数字【位置一旦固定,不参与下次排序】
(1)假定最小数是arr[3]即min=arr[3]=15
(2) 从arr[4]-arr[n-1]找最小值(即从【22】找最小值)与arr[3]交换。
min=15和arr[4]=22比较: 若min>arr[4],min=ar