当前位置: 首页 > 知识库问答 >
问题:

排序算法

姬高澹
2023-03-14

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

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.

共有1个答案

赵鸿畴
2023-03-14

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

想象一下如果l=[10000001200000,-34]。然后,您的算法将首先运行1000000次迭代,而不做任何操作,只需将a从0增加到1000000。然后它将向sl追加1000000。然后它将再次运行200000次迭代而不做任何事情,只是将a从1000000增加到1200000。

然后它将继续递增a,寻找数字-34,它低于0...

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

请注意,min()有一个缺点:它返回最小元素的值,但不返回其在列表中的位置。因此,在使用min()找到元素后,如何从l中删除该元素并不十分明显。另一种方法是编写自己的函数,返回元素及其位置。您可以通过一个循环来实现这一点:在下面的代码段中,i指的是列表中的一个位置(0是第一个元素的位置,1是第二个元素的位置,等等),而a指的是该元素的值。我留下了空白,你必须弄清楚如何选择列表中最小元素的位置和值。

....
for i, a in enumerate(l):
    if ...:
        ...
...

如果你做到了这一切,恭喜你!您已经实现了“选择排序”。这是一个众所周知的排序算法。这是最简单的方法之一。存在许多其他排序算法。

 类似资料:
  • 待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。 使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。 排序算法的成本模型是比较和交换的次数。 // java public abstract class Sort<t extends="" comparable

  • 冒泡排序 相邻的两个元素依次比较,小的放在左边。 选择排序 从未排序序列中找到最大(小)值存放到已排序序列末尾。 插入排序 从已排序序列中找到小于或等于当前数的位置并插到其后。 希尔排序 归并排序 归并排序(merge sort)是创建在归并操作上的一种有效的排序算法。归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。 递归方式 此方式

  • 本文向大家介绍C#排序算法之堆排序,包括了C#排序算法之堆排序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现堆排序的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。 特别是python能用一句话实现快速排序。 思路说明 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解

  • 主要内容:桶排序算法的实现思路,桶排序算法的具体实现桶排序(又称箱排序)是一种基于分治思想、效率很高的排序算法,理想情况下对应的时间复杂度为 O(n)。 接下来,我们系统地学习一下桶排序算法。 桶排序算法的实现思路 假设一种场景,对 {5, 2, 1, 4, 3} 进行升序排序,桶排序算法的实现思路是: 准备 5 个桶,从 1~5 对它们进行编号; 将待排序序列的各个元素放置到相同编号的桶中; 从 1 号桶开始,依次获取桶中放置的元素,得到的就是一

  • 在AnyLogic中,我们可以执行max和min来找出两个值之间的最大值或最小值。然而,我如何执行(例如)5个值的排序,其中每个值存储在一个变量中(用于基于代理的建模)? 事先非常感谢。如果你认为更多的细节应该提供,也请让我知道。