は、まあ、いくつかのミスがここにあります:すべての
- は、まずあなたが
list[i]
にそれをするたびに割り当てているので、あなたは、奇妙な方法でmin
を計算します。
- "スワップ"しないと、リストのその部分に最小値を割り当てるだけです。
は何が基本的に必要なのは、それぞれの時間は、その後i
間の最小とリストの最後、および「シフト」の右に他の要素、または占有している要素とのスワップを行うのいずれかを計算するアルゴリズムでありますその要素を配置したい場所。
私は最小値を見つけることO(N) opeationあることO(1)操作(ただし、心であるので(スワッピング)後者は、ほんの少しより効率的であると思う。
だから、使用することができます。
def sort_list(self,data):
n = len(data) # obtain the length of the list
for i in range(n):
min, minj = data[i], i # we use data[i] as the running min
# i as index of the smallest item
for j in range(i+1,n): # iterate over the remainder of the list
if data[j] < min: # if we find a smaller item
min, minj = data[j], j # update min and minj
# perform a swap between i and minj
t = data[i]
data[i] = min
data[minj] = t
return data
をあなたがより良い組み込みを使用し、挿入ソートは間違いない最も効率的なソートアルゴリズムで言われていること0メソッド、またはsorted
関数で、Python用に最適化されています。
あなたは 'list [i] = min'と書いています。他の要素を1つ右にシフトするのではなく、その場所に割り当てます。 –
ありがとうございます。私は上記のコードを編集しました。結果はまだ同じです –