首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序算法

排序算法
EN

Stack Overflow用户
提问于 2020-07-22 21:25:33
回答 1查看 50关注 0票数 0

我想通过删除已经排序的项来提高算法的效率,但我不知道如何才能有效地做到这一点。我发现的唯一方法就是重写整个列表。

代码语言:javascript
复制
l = [] #Here you put your list
sl = [] # this is to store the list when it is sorted
a = 0 # variable to store which numbers he already looked for
while True: # loop
    if len(sl) == len(l): #if their size is matching it will stop
        print(sl) # print the sorted list
        break
    a = a + 1 
    if a in l: # check if it is in list
        sl.append(a) # add to sorted list
#here i want it to be deleted from the list.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 21:42:59

变量a有点笨拙。它从0开始,将1递增1,直到它与列表l中的元素相匹配

想象一下如果l = [1000000, 1200000, -34]。然后,你的算法将首先运行1000000次迭代,不做任何事情,只是将a从0递增到1000000。然后,它会将1000000附加到sl。然后,它将再次运行200000次迭代,不做任何事情,只是将a从1000000递增到1200000。

然后,它将继续递增a,查找数字-34,该数字小于零...

我知道您的变量a背后的思想是按顺序从l中选择元素,从最小的元素开始。有一个函数可以做到这一点:它被称为min()。尝试使用该函数从l中选择最小的元素,并将该元素附加到sl。然后从l中删除该元素;否则,下一次调用min()将再次选择相同的元素,而不是选择下一个最小的元素。

请注意,min()有一个缺点:它返回最小元素的值,但不返回它在列表中的位置。因此,在使用min()找到元素之后,如何从l中删除它并不是很明显。另一种方法是编写自己的函数,同时返回元素及其位置。在下面的代码中,i引用列表中的一个位置(0是第一个元素的位置,1是第二个元素的位置,依此类推),a引用该元素的值。我留了空格,您必须弄清楚如何选择列表中最小元素的位置和值。

代码语言:javascript
复制
....
for i, a in enumerate(l):
    if ...:
        ...
...

如果你做到了这一切,恭喜你!你已经实现了“选择排序”。这是一个广为人知的排序算法。这是最简单的方法之一。还有许多其他的排序算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63035269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档