美文网首页
2.选择排序和递归

2.选择排序和递归

作者: 小懒额 | 来源:发表于2018-05-24 08:13 被阅读0次

现在有一个无序数组,需要把数组里面的数字按照从小到大的顺序排列,我们可以怎么做?

比较简单的一个方法是挨个去查看数组里面的数字,找到最小的一个数字,然后把找到的这个最小数字放进一个新数组,接下来再去找原先数组里面剩下的数字中最小的数字,找到后再放入新数组的末尾,这样一直操作到数组中的数字被找完为止。

这种方法就是选择排序,不断选择最小的数,然后进行排序。

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

可以看出,在计算过程中,把先计算出来的数放在一边,直到最后达到基线条件时在一个个取出来继续运算。

相关文章

  • 2.选择排序和递归

    现在有一个无序数组,需要把数组里面的数字按照从小到大的顺序排列,我们可以怎么做? 比较简单的一个方法是挨个去查看数...

  • 2020-08-21 算法合集

    1. 冒泡排序 2.选择排序 3. 插入排序 4. 希尔排序 5. 归并排序(递归实现) 6. 快速排序(递归实现...

  • 排序算法

    递归找到最小值排序 2.选择排序 归并排序 4.计数排序(哈希表)

  • 算法设计与分析——5.排序与树结构

    5.1 引言 5.2 递归与排序 5.2.1 选择排序 代码 5.1 选择排序的递归实现 代码 5.2 选择排序...

  • 2020-11-14

    关于算法 一、选择排序(递归) 选择排序:每次找到最小值放到最前面 注:所有递归都能改成循环 选择排序(循环) 二...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • JS版本 排序算法

    1.三种排序--冒泡,选择排序,快排 2.二分查找(非递归版本) 3.链表反转

  • 常见算法的 Python 实现

    二分法查找 非递归版本: 递归方法实现: 冒泡排序 选择排序

  • PHP数组示例算法

    1、冒泡排序 2、归并排序 3、二分查找-递归 4、二分查找-非递归 5、快速排序 6、选择排序 7、插入排序

  • iOS 算法之排序、查找、递归

    文章内容来自:iOS 算法之排序、查找、递归 排序 冒泡排序(依次循环旁边的比较放到后边去) 选择排序(拿前边的和...

网友评论

      本文标题:2.选择排序和递归

      本文链接:https://www.haomeiwen.com/subject/cujjjftx.html