一、个人理解可分为 5 步来实现:
1、函数 selectionSort 获取数组值后赋值到数组 arr 并传递到函数 findSmallest 查找当前 arr 的最小值。
2、函数 findSmallest 获取 arr 的值后,将 arr 的第一个值和索引存储到变量 samllest 和 smallest_index 上。
3、通过循环(循环次数为 arr 值总数)对比 arr[i] 的值和变量 smallest,如果 arr[i] 小于 smallest,那么将当前的 arr[i] 值取代原来的 smallest 值,完成整个循环对比后,返回最终最小值的索引值到函数 selectionSort。
4、函数 selectionSort 获取到数组索引后,通过 arr.pop(smallest_index) 移取出目标数值并通过 append 添加到新数组 newArr 中完成数值转移。
5、这时,再将被移除最小值的 arr 传值到 findSmallest 查找 arr 下一个最小值,完成所有循环后,就能得到一个从小到大的顺序排序排列的数组
二、代码实现
# 对数组进行排序
def selectionSort(arr):
newArr = []
for i in range(len(arr)):
smallest_index = findSmallest(arr)
newArr.append(arr.pop(smallest_index)) # 将 arr 中最小值移到 newArr 中.
return newArr
# 找出数组中最小元素
def findSmallest(arr):
smallest = arr[0] # 存储最小的值
smallest_index = 0 # 存储最小值的索引
for i in range(1, len(arr)):
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index
result = selectionSort([5, 3, 0])
print(result) # [0, 3, 5]
三、数据测试
1、假设我们要排序数组 [5, 3, 0],那么这时 arr = [5, 3, 0]
2、通过函数 findSmallest(arr) 对比查找最小值得到是 0 ,而 0 的索引是 2,即会返回 2 并赋值到函数 selectionSort 的变量 smallest_index 中。
3、通过 arr.pop(2) 移除 arr 中对应的数据(0),又通过 append 赋值 0 到新数组 newArr 中。
4、这时 arr = [5, 3],newArr = [0]。因为 selectionSort 的循环还没有结束,所以要进行下一次循环,把改变后的 arr([5, 3])传到函数 findSmallest(arr) 进行新的一轮对比返回当下数组([5, 3])最小值的索引。
5、以此循环类推,最后得到一个从小到大的顺序排序排列的数组([0, 3, 5])