用Python排序和搜索

如果给您一张包含1000个名称列表的纸,并且要求您找到某个名称,但是该列表不是按任何顺序排列(例如,字母顺序),那将非常令人沮丧,不是吗? 尽管需要很长的时间,但将列表排序会使得查找名称变得容易得多。 因此,使事物井然有序是我们人类的自然愿望,搜索此列表显然要比搜索无序列表花费更少的精力。

让我们进入计算机世界,可能需要搜索列表的地方非常庞大,即使使用快速计算机也可能会影响性能。 在这种情况下,拥有合适的排序和搜索算法将是解决此类问题的方法。 排序是按顺序排列值列表,而搜索是在列表中查找值位置的过程。

为了明确说明这个问题的严重性,让我向您展示美国斯坦福大学计算机科学家,数学家,名誉教授Donald Knuth计算机编程艺术,第3卷,排序和搜索,第3页中提到的内容:

1960年代的计算机制造商估计,考虑到所有客户之后,计算机上超过25%的运行时间都花在了排序上。 实际上,在许多安装中,排序任务占据了一半以上的计算时间。 根据这些统计数据,我们可以得出以下结论:或者(i)排序有许多重要的应用,或者(ii)很多人在不应该排序的时候进行排序,或者(iii)效率低下的排序算法已被普遍使用。

在本教程中,我将专门描述选择排序算法(排序)和线性搜索算法(搜索)。

选择排序算法

选择排序算法基于最小值或最大值的连续选择。 假设我们有一个列表 ,我们想要按升序排序(从较小的值到较大的值)。 最小的元素将在列表的开头,而最大的元素将在列表的末尾。

假设原始清单如下:

| 7 | 5 | 3.5 | 4 | 3.1 |

我们要做的第一件事是在列表中找到最小值 ,在我们的例子中是3.1

找到最小值后,将该最小值与列表中的第一个元素交换 。 也就是说,将3.17交换。 现在,该列表将如下所示:

| 3.1 | 5 | 3.5 | 4 | 7 |

现在我们可以确定第一个元素在列表中的正确位置,我们从列表中的第二个元素开始重复上述步骤(查找最小值)。 我们可以发现列表中的最小值(从第二个元素开始)为3.5 。 因此,我们现在将3.55交换。 现在列表如下:

| 3.1 | 3.5 | 5 | 4 | 7 |

至此,我们可以确定第一个元素和第二个元素处于正确的位置。

现在,我们检查列表其余部分中的最小值,即从第三个元素5 。 列表其余部分中的最小值是4 ,现在我们将其交换为5 。 因此,列表如下:

| 3.1 | 3.5 | 4 | 5 | 7 |

因此,我们现在可以确定前三个元素处于正确的位置,并且该过程将以这种方式继续进行。

让我们看看如何在Python(基于Isai Damier )中实现选择排序算法:

def selectionSort(aList):
    for i in range(len(aList)):
        least = i
        for k in range(i+1, len(aList)):
            if aList[k] < aList[least]:
                least = k
                
        swap(aList, least, i)
        
def swap(A, x, y):
    temp = A[x]
    A[x] = A[y]
    A[y] = temp

让我们通过在上述脚本的末尾添加以下语句来测试算法:

my_list = [5.76,4.7,25.3,4.6,32.4,55.3,52.3,7.6,7.3,86.7,43.5]
selectionSort(my_list)
print my_list

在这种情况下,您应该获得以下输出:

[4.6, 4.7, 5.76, 7.3, 7.6, 25.3, 32.4, 43.5, 52.3, 55.3, 86.7]

线性搜索算法

线性搜索算法是一种简单的算法,其中对列表中的每个项目(从第一个项目开始)进行调查,直到找到所需的项目或到达列表的末尾为止。

线性搜索算法在Python中的实现方式如下(基于Python School ):

def linearSearch(item,my_list):
    found = False
    position = 0
    while position < len(my_list) and not found:
        if my_list[position] == item:
            found = True
        position = position + 1
    return found

让我们测试一下代码。 在上面的Python脚本的末尾输入以下语句:

bag = ['book','pencil','pen','note book','sharpener','rubber']
item = input('What item do you want to check for in the bag?')
itemFound = linearSearch(item,bag)
if itemFound:
    print 'Yes, the item is in the bag'
else:
    print 'Oops, your item seems not to be in the bag'

输入input ,请确保input在单引号或双引号之间(即'pencil' )。 例如,如果输入'pencil' ,则应获得以下输出:

Yes, the item is in the bag

而如果输入'ruler'作为输入,则会得到以下输出:

Oops, your item seems not to be in the bag

如我们所见,Python再次证明自己是一种编程语言,可以像在此一样轻松地对算法概念进行编程,以处理排序搜索算法。

重要的是要注意,还有其他类型的排序和搜索算法。 如果您想使用Python深入研究此类算法,可以参考此页面

翻译自: https://code.tutsplus.com/tutorials/sorting-and-searching-in-python--cms-25668

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值