Algorithm 未能按排序方式打印列表,而未对列表进行实际排序

Algorithm 未能按排序方式打印列表,而未对列表进行实际排序,algorithm,sorting,Algorithm,Sorting,我正在努力以排序的方式对列表进行排序,但实际上却没有对列表进行“排序” arr = [3, 2, 1, 4, 5] count = 0 current = arr[0] prev = -1 while count < len(arr): for item in arr: if current < item > prev: current = item prev = current count = count

我正在努力以排序的方式对列表进行排序,但实际上却没有对列表进行“排序”

arr = [3, 2, 1, 4, 5]

count = 0
current = arr[0]
prev = -1

while count < len(arr):

    for item in arr:
        if current < item > prev:
            current = item
    prev = current
    count = count + 1
    print(current)

我不想对名单进行排序。我想知道是否有一种方法可以不对列表进行排序,也不更改原始列表并以排序的方式打印项目?

不清楚您想做什么。若您想要一个已排序的副本,您可以创建一个包含原始对象索引的列表(
[0,1,2,…,n]
),然后通过比较这些索引处的原始值对其进行排序,然后将此已排序列表映射回第一个列表中的值

但更简单的方法还是对列表中的一个浅克隆进行排序

arr = [3, 2, 1, 4, 5]

count = 0
current = arr[0]
prev = -1

while count < len(arr):

    for item in arr:
        if current < item > prev:
            current = item
    prev = current
    count = count + 1
    print(current)
如果您阅读了Javascript,下面是该思想的演示,使用一个简单的
range
helper函数创建索引列表:

const arr=[8,6,7,5,3,0,9]
常数范围=(低,高)=>
[…数组(hi-lo)].map(((μ,i)=>lo+i)
常量索引排序=(ns)=>
范围(0,ns.长度)
.sort((i,j)=>ns[i]-ns[j])
.map(x=>ns[x])
log('indexSort:',indexSort(arr))
log('浅克隆:',[…arr].sort((a,b)=>a-b))
console.log('no mutation of original array:',arr)

。作为控制台包装{max height:100%!important;top:0}
我正在努力以排序方式对列表进行排序,而不是实际“排序”列表。。。。这到底是什么意思?对列表进行排序。@ggorlen这就是重点。我不想对名单进行排序。我想知道是否有一种方法可以不对列表进行排序,也不更改原始列表并以排序方式打印项目?是的,您可以使用睡眠排序/sorry@BrainDead这是个玩笑吗?我问了一个严肃的问题是的,“睡眠排序”是一个笑话,它是一个有历史的笑话。这是一个干净的JS实现:
constsleepsort=async(xs)=>Promise.all(xs.map(x=>newpromise((res)=>setTimeout(res,x,x)))
。它将在大约
n
毫秒内解析为已排序列表,其中
n
是列表中最大的数字。