现在有一个无序数组,需要把数组里面的数字按照从小到大的顺序排列,我们可以怎么做?
比较简单的一个方法是挨个去查看数组里面的数字,找到最小的一个数字,然后把找到的这个最小数字放进一个新数组,接下来再去找原先数组里面剩下的数字中最小的数字,找到后再放入新数组的末尾,这样一直操作到数组中的数字被找完为止。
这种方法就是选择排序,不断选择最小的数,然后进行排序。
def find_smallest(arr):
smallest = arr[0]
index = 0
for i in range(1, len(arr)):
if smallest > arr[i]:
smallest = arr[i]
index = i
return index
def selection_sort(arr):
new_arr = []
for _ in range(len(arr)):
smallest_index = find_smallest(arr)
new_arr.append(arr.pop(smallest_index))
return new_arr
print(selection_sort([4, 1, 5, 3, 2, 8, 7, 6, 9]))
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
如果现在需要去一棵树的顶端摘一个果子,一般是先爬到第一个树干,然后再去第二个树干,一直到树的顶端,摘到果子后,还要从最靠近顶端的一个树干,一个一个爬下来,递归和这个有点儿像。递归中有两个条件,决定了这个递归是可执行的,第一个是基线条件,在这里就是能够在树上摘到果子,第二个是递归条件,这里就是可以到达下一个树干。这里还有一个栈的概念,就类似于爬的树干,一个个爬上去,最后还得一个个爬下来。但是不一样的是,栈的数据是一个个从压进去,然后从顶部一个个拿出来。
一个比较简单的例子就是用递归来计算阶乘,
def fact(x):
if x == 1:
return 1
else:
return x * fact(x-1)
print(fact(5))
>>>
120
可以看出,在计算过程中,把先计算出来的数放在一边,直到最后达到基线条件时在一个个取出来继续运算。
网友评论