Python 插入排序算法
基本上,我正在尝试用Python写一个插入排序的算法,但我不知道哪里出错了。
#!/usr/bin/env python
# coding: utf-8
import random
Array = random.sample(range(30), 5)
First = 1
Last = len(Array)
PositionOfNext = Last – 1
while PositionOfNext >= First:
Next = Array(PositionOfNext)
Current = PositionOfNext
while (Current < Last) and (Next > Array[Current] + 1):
Current = Current + 1
(Array[Current] - 1) = Array[Current]
Array[Current] = Next
PositionOfNext = PositionOfNext - 1
print Array
3 个回答
0
你觉得这样怎么样:
def insertion_sort(x):
# insertion sort
# we can optimize for desc, asc if we want to
# advantages: online, O(nk) for nearly sorted
x_sorted = [x[0]]
x_unsorted = x[1::]
for xx in x_unsorted:
x_sorted.append(xx) # make room, and/or assume a sorted input list
for i in range(len(x_sorted)-1):
if xx < x_sorted[i]: # asc?
x_sorted[i+1::] = x_sorted[i:-1] # shift old values
x_sorted[i] = xx # insert new
break # nothing to do in the inner loop form here on out
i += 1
return x_sorted
0
def insertionSort(alist):
for index in range(1,len(alist)):
currentvalue = alist[index]
position = index
while position>0 and alist[position-1]>currentvalue:
alist[position]=alist[position-1]
position = position-1
alist[position]=currentvalue
alist = [54,26,93,17,77,31,44,55,20]
insertionSort(alist)
print(alist)
0
修复了一些语法问题和一些索引的问题。
同时将:
(Array[Current] - 1) = Array[Current]
替换为:
Array[Current - 1], Array[Current] = Array[Current], Array[Current - 1]
代码已经完成
#!/usr/bin/env python
# coding: utf-8
import random
Array = random.sample(range(30), 5)
print Array
First = 0
Last = len(Array) - 1
PositionOfNext = Last - 1
while PositionOfNext >= First:
Next = Array[PositionOfNext]
Current = PositionOfNext
while (Current < Last) and (Array[Current] > Array[Current + 1]):
Current = Current + 1
Array[Current - 1], Array[Current] = Array[Current], Array[Current - 1]
Array[Current] = Next
PositionOfNext = PositionOfNext - 1
print Array