实现以下算法进行排序

时间:2014-10-04 19:03:01

标签: python algorithm sorting

我正在编写此算法进行排序。我没有看到它与插入排序有何不同。我想知道是否有人可以帮我理解差异。当前的排序是作为插入写的,因为我还没有看到差异。这是家庭作业,所以我不想要一个答案,我想了解其中的差异。算法为here

def file_open(perkList,fileName):


    with open(fileName, 'r') as f:
        for line in f.readlines():
            perkList.append(int(line))
def perkSort(perkList):
    for marker in range(len(perkList)):
        save = perkList[marker]
        i = marker
        while i < len(perkList) and perkList[i+1] > save:
            perkList[i] = perkList[i-1]
            i = i - 1
            perkList[i] = save
    print("New list",perkList)




def main():
     perkList = []
     file_open(perkList,'integers')
     file_open(perkList,'integers2')
     print("initial list",perkList)
     perkSort(perkList)

main()

道歉这个问题并不干净。编辑表示赞赏。

2 个答案:

答案 0 :(得分:0)

您编写的程序确实实现了插入排序。

让我们举一个例子,看看你的程序会做什么。输入5 8 2 7

第一次迭代后

5 8 2 7

第二次迭代后

2 5 8 7

第三次迭代后

2 5 7 8

但是链接中给出的算法的工作方式不同。它需要最大的元素并将其放在最后。对于我们的例子

第一次迭代后

5 2 7 8

第二次迭代后

2 5 7 8

答案 1 :(得分:0)

您的作业中提到的Perksort算法基本上是 冒泡排序 算法。您实施的是 Inserion Sort 算法。区别如下:

插入排序

它的工作原理是将输入列表中的元素插入到已排序的列表中的正确位置。也就是说,它一次构建一个项目的排序数组。

## Unsorted List ##
7 6 1 3 2

# First Pass
  7 6 1 3 2
# Second Pass
  6 7 1 3 2
# Third Pass
  1 6 7 3 2
# Fourth Pass
  1 3 6 7 2
# Fifth Pass
  1 2 3 6 7

请注意,在 i 迭代之后,第一个 i 元素被排序。

您在 ith 步骤中获得了最多 i 次迭代。

伪码:

for i ← 1 to length(A)
  j ← i
  while j > 0 and A[j-1] > A[j]
     swap A[j] and A[j-1]
     j ← j - 1

这是你在python实现中所做的。

一些复杂性分析:

 Worst case performance       О(n2)
 Best case performance        O(n)
 Average case performance     О(n2)
 Worst case space complexity  О(n) total, O(1) auxiliary

冒泡排序

这是 PerkSort算法,用于在作业中实现。

它的工作原理是反复扫描要排序的列表,同时比较相邻的元素对,然后根据需要进行交换。

## Unsorted List ##
7 6 1 3 2

# First Pass
  6 1 3 2 7
# Second Pass
  1 3 2 6 7
# Third Pass
  1 2 3 6 7
# Fourth Pass
  1 2 3 6 7
# No Fifth Pass as there were no swaps in Fourth Pass

请注意,在 i 迭代之后,最后的 i 元素是最大的,并且是有序的。

您在 ith 步骤中获得了最大的 n-i-1 次迭代。

我不在这里给psuedocode,因为这是你的家庭作业。

提示:您将向前移动标记,以便将元素向上移动,就像冒泡一样

一些复杂性分析:

 Worst case performance       О(n2)
 Best case performance        O(n)
 Average case performance     О(n2)
 Worst case space complexity  О(n) total, O(1) auxiliary

相似性

  • 两者都有相同的最坏情况,平均情况和最佳案例时间 复杂性
  • 两者都具有相同的空间复杂性
  • 两者都是就地算法(即他们更改原始数据)
  • 两者都是Comparision Sorts

差异(当然除了算法)

即使两种算法平均具有相同的时间和空间复杂性,实际上插入排序比冒泡排序更好。这是因为平均冒泡排序需要比插入排序更多的交换。插入排序在具有少量inversions的列表中表现更好。