python - 在 Python 中使用新数组的插入算法
问题描述
我正在尝试实现排序算法,该算法采用元素并将其复制到 tonew array
并以某种方式对它们进行排序。我知道,这是一种低效且过时的方法,但这里的目标是改善算法思维方式。我将粘贴所有代码,这有点广泛但没有留下任何空白。
该块,特别是要修复的块可能是以 . 开头的块while not check
。我正在尝试最坏的情况(反转数组)。
所以每次索引j=0
和它从头开始做交换。我希望它反之亦然(从头开始)。
def swap(container, i, j):
if container[i] != container[j]:
container[i], container[j] = container[j], container[i]
def old_sort(container):
new_arr = [0 for i in range(0, 20)]
new_arr[0] = container[0]
j = 0
for i in range(1, len(container)):
if len(new_arr) == 1 and container[i] < new_arr[j]:
container[j+1] = container[i]
while container[i] < new_arr[j]:
j -=1
if j < 0:
j +=1
tmp = container[i]
index = j
check = False
while not check and j < len(new_arr) and container[j] != 0:
new_arr[j+1] = new_arr[j]
j +=1
check = True
check = False
new_arr[index] = tmp
return new_arr
container = [i for i in range(10, -1, -1)]
sorted_arr = old_sort(container)
print(sorted_arr)
更新:
我已经在不使用第二个索引的情况下查明了问题。正如我正在设置的那样tmp=container[i]
,我必须将它与之前的元素容器 [i-1] 进行比较,然后进行交换,最后设置tmp
到正确的位置。
def old_sort(container):
new_arr = [0 for i in range(0, 11)]
new_arr[0] = container[0]
for i in range(1, len(container)):
tmp = container[i]
while tmp < new_arr[i - 1] and i > 0:
new_arr[i] = new_arr[i-1]
i -=1
if i < 0:
i +=1
new_arr[i] = tmp
return new_arr
tests = [
[11,9,29,7,2,15,28],
[3, 7, 9, 11],
[25, 22, 21, 10],
[29, 15, 28],
[6]
]
for elements in tests:
new_arr = old_sort(elements)
print(new_arr)
输出:
[2, 7, 9, 11, 15, 28, 29, 0, 0, 0, 0]
[3, 7, 9, 11, 0, 0, 0, 0, 0, 0, 0]
[10, 21, 22, 25, 0, 0, 0, 0, 0, 0, 0]
[15, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0]
[6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
解决方案
您可以从 j 作为最后一项进行迭代,直到 0。我不确定您是否想要更改用于 new_arr 的索引,也许您想要 j-1。
j = len(new_arr) - 1
while not check and j >= 0 and container[j] != 0:
new_arr[j + 1] = new_arr[j]
j -= 1
check = True
推荐阅读
- webpack - 如何使用 Webpack / create-react-app 将现有样式表作为 CSS 模块导入
- intel-pin - Intel pin:获取指令内存写入\读取大小
- java - Java net-beans - 如果用户登录失败,则使用网络摄像头捕获图像
- php - strpos() 数组问题
- distance - 海龟之间的距离(车)
- python - 如果python中的fullfil标准有效地替换元素
- python - 即使使用带有 isdigit() 的数字,我的 while 循环也是无限的
- ios - 如何使用 userdefault Swift 4 存储和检索表数据
- css - 关于css没有被应用的问题
- pytorch - 无法在 Caffe2 中打开 lmdb db 文件