python - 插入排序 Python

标签 python algorithm sorting insertion-sort

我已经在Python中实现了插入排序,并且想知道如何确定算法的复杂性。这是实现插入排序的低效方法吗?对我来说,这似乎是最具可读性的算法。

import random as rand
source = [3,1,0,10,20,2,1]
target = []
while len(source)!=0:
 if len(target) ==0:
  target.append(source[0])
  source.pop(0)
 element = source.pop(0)
 if(element <= target[0]):
  target.reverse()
  target.append(element)
  target.reverse()
 elif element > target[len(target)-1]:
  target.append(element) 
 else:
  for i in range(0,len(target)-1):
   if element >= target[i] and element <= target[i+1]:
    target.insert(i+1,element)
    break
print target 

最佳答案

而不是:

target.reverse()
target.append(element)
target.reverse()

尝试:

target.insert(0, element)

此外,也许可以使用 for 循环,而不是 while 循环,以避免 source.pop()?:

for value in source:
  ...

在最后的 else block 中,if 测试的第一部分是多余的:

else:
   for i in range(0,len(target)-1):
     if element >= target[i] and element <= target[i+1]:
        target.insert(i+1,element)
        break

由于列表已经排序,只要您找到比要插入的元素大的元素,您就找到了插入位置。

关于python - 插入排序 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234129/

相关文章:

python - 使用 PySide 和多处理卡住 GUI

python - 如何减少 python 中的大列表使用的内存

algorithm - 如何生成所有 Tetrominos 的列表?

java - 将多个字符串散列为一个哈希

javascript - 预览 d3 条形图,使其按每个 x 值的值排序

python - 在 Django 上进行测试时遇到的问题

python - 是否可以获得应用程序所有版本的列表?

algorithm - 有效计算一组点的所有成对距离的总和,所有这些都在有限的二维网格上

python - 如何使用 Pandas 对数据帧索引进行重新排序/排序?

vector 冒泡排序的 C++ 长度错误