gpt4 book ai didi

python - 这个排序算法有名字吗? (选择和合并之间的交叉)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:16 25 4
gpt4 key购买 nike

<分区>

我只是想到了一个有趣的排序方式。我敢肯定有人以前想过它,但我从未见过。它分为两个步骤:

1- 遍历输入列表,将有序(不一定连续)的项目序列拉出到箱中。为每一遍创建一个 bin,直到列表为空。

2- 使用标准合并(重复选择最低的第一个元素)将已排序的 bin 合并回一起

这是我用 Python 制作的原型(prototype)。下面的输出可能更具启发性。

items = len(unsorted)
sortedBins = []
# Pull out bins of sorted numbers, until the unsorted list is depleted:
while( len(unsorted) > 0 ):
print "Unsorted list: " + `unsorted`
highest = float("-inf")
newBin = []

i = 0
while( i < len(unsorted) ):
# Find items in unsorted list that are in order, pop them out:
if( unsorted[i] >= highest ):
highest = unsorted[i]
newBin.append( unsorted.pop(i) )
i=i+1

sortedBins.append(newBin)
print "bin[%i]: "%(len(sortedBins)-1) + `newBin`
print

# Merge all of the sorted bins together:
sorted = []
while( len(sorted) < items ):
lowBin = 0
for j in range( 0, len(sortedBins) ):
if( sortedBins[j][0] < sortedBins[lowBin][0] ):
lowBin = j
print "lowBin: %i: %i" % (lowBin, sortedBins[lowBin][0])
sorted.append( sortedBins[lowBin].pop(0) )
if( len(sortedBins[lowBin]) == 0 ):
del sortedBins[lowBin]

print "sorted:" + `sorted`

如果我不疯狂的话,最坏的情况(一个完全颠倒的列表)似乎需要 n(n+1) 时间(也就是说,n(n+1)/2每个循环)。最好的情况(一个已经排序的列表)将花费 2*n 时间。

编辑:它现在运行了,所以不要再提示了。这是输出,它进一步演示了它是如何工作的:

Unsorted list: [1, 4, 3, 8, 3, 7, 9, 4, 8, 9, 3]
bin[0]: [1, 3, 3, 9, 9]

Unsorted list: [4, 8, 7, 4, 8, 3]
bin[1]: [4, 7, 8]

Unsorted list: [8, 4, 3]
bin[2]: [8]

Unsorted list: [4, 3]
bin[3]: [4]

Unsorted list: [3]
bin[4]: [3]

lowBin: 0: 1
lowBin: 0: 3
lowBin: 0: 3
lowBin: 4: 3
lowBin: 1: 4
lowBin: 3: 4
lowBin: 1: 7
lowBin: 1: 8
lowBin: 1: 8
lowBin: 0: 9
lowBin: 0: 9
sorted:[1, 3, 3, 3, 4, 4, 7, 8, 8, 9, 9]

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com