Python 插入排序算法

1 投票
3 回答
2342 浏览
提问于 2025-04-17 22:07

基本上,我正在尝试用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

撰写回答