将值假定为初始值,并在循环中更新其值

时间:2018-11-22 06:40:35

标签: python algorithm

我正在学习选择排序算法

find_smallest

我对函数[NSTimer scheduledTimerWithTimeInterval:target:selector: userInfo: repeats:], 感到好奇,
首先将arr [0]设为最小并启动循环。

我知道完整的代码称为选择排序算法

假设并在循环中更新其值,是否有术语?

3 个答案:

答案 0 :(得分:1)

否。与快速排序不同,没有术语,我们选择枢轴并比较元素。 没有话题,但是关于选择排序的有趣事实是

关于选择排序的好处是它所做的交换不超过O(n)交换,并且在内存写入是一项昂贵的操作时很有用。

答案 1 :(得分:1)

我认为bubble sort是答案。在我看到您的问题:D

之前,我从未考虑过bubble loop作为最小假设。
def sort(arr):
    for i in range(len(arr)):
        # we presume a[i] is the smallest one. Then we update by compare it with the rest of the list
        for j in range(i + 1, len(arr)):
            if arr[i] > arr[j]: # if our assumption is wrong (arr[i] is not the smallest), update it with arr[j] (which is smaller than arr[i])
                swap(arr[i], arr[j])

        # After this `for j` loop, arr[i] will be the smallest value of the list

答案 2 :(得分:1)

假定列表的第一个索引为最小值,然后向下运行列表以查看是否存在较小的值,当找到较小的值时,它将更新smallest,这样做直到列表的末尾,以确保您找到整个列表中的最小值,在您提供的示例中,它返回了列表中最小值的索引。

我添加了2条print语句,这些语句应使您对其工作原理有所了解:

from typing import List
def find_smallest(arr:List) -> int:
    smallest = arr[0] #set pivot
    smallest_index = 0
    print("presumed smallest {}".format(smallest)) #print presumed
    for i in range(1, len(arr)):
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
            print("updated smallest {}".format(smallest)) #print updates to smallest
    return smallest_index

结果:

find_smallest([7,6,1,3,8,9,0])

>>presumed smallest 7
updated smallest 6
updated smallest 1
updated smallest 0

6