我对编程还很陌生;我学习Python才几个星期。最近我做了一个练习,要求我生成一个整数列表,然后在一个单独的列表中手动从最低到最高排序。
import random
unordered = list(range(10))
ordered = []
lowest = 0
i = 0
random.shuffle(unordered)
lowest = unordered[0]
while i in unordered:
if unordered[i] < lowest:
lowest = unordered[i]
i += 1
if i >= len(unordered):
i = 0
ordered.append(lowest)
unordered.remove(lowest)
lowest = unordered[i]
print(ordered)
这就是我到目前为止所拥有的,坦率地说,它根本不起作用。我得到的伪代码是:
- 创建一个空列表以容纳有序元素
- 而无序列表中仍有元素
- 将变量最低值设置为无序列表中的第一个元素
- 对于无序列表中的每个元素
- 如果元素低于最低值
- 将该元素的值指定为最低
- 将最低值附加到已排序的列表
- 从无序列表中删除最低
- 打印出已订购的列表
到目前为止,我遇到的最大问题是,我的计数器不能可靠地为我提供一种从无序列表中选出最低数字的方法。然后我在索引列表时遇到问题,即索引超出范围。有人能给我一些关于我哪里出了问题的反馈吗?
此外,我得到了这个信息,我真的不确定:
您可以使用一种已建立的方法对列表进行排序,称为选择排序。
这次我不应该使用Python的内置排序方法。这一切都应该手动完成。谢谢你的帮助!
您可以做到这一点,而不必创建另一个列表。
x = [5, 4, 3, 2, 5, 1]
n = len(x)
# Traverse through all list elements
for i in range(n):
# Traverse the list from 0 to n-i-1
# (The last element will already be in place after first pass, so no need to re-check)
for j in range(0, n-i-1):
# Swap if current element is greater than next
if x[j] > x[j+1]:
x[j], x[j+1] = x[j+1], x[j]
print(x)
这适用于重复项和降序列表。它还包括一个小的优化,以避免对最后一个元素进行不必要的比较。
注意:这个答案和其他所有答案都使用了冒泡排序,这很简单,但效率很低。如果你在寻找性能,那么使用另一种排序算法会更好。看看哪种是最好的排序算法,为什么?
您只是弄错了一些订单:每次前后都需要追加到您的订单列表中
import random
unordered = list(range(10))
ordered = []
i = 0
random.shuffle(unordered)
print unordered
lowest = unordered[0]
while len(unordered) > 0:
if unordered[i] < lowest:
lowest = unordered[i]
i += 1
if i == len(unordered):
ordered.append(lowest)
unordered.remove(lowest)
if unordered:
lowest = unordered[0]
i = 0
print(ordered)
您不应该创建一个新的排序列表算法,只需实现以下算法即可:http://en.wikipedia.org/wiki/Bubble_sort
我发现这对任何数量的输入都能很好地工作
x = [3, 4, 100, 34, 45]
for i in range(len(x) - 1):
if x[i] > x[i + 1]:
x[i],x[i + 1] = x[i + 1], x[i]
print (x)
如果有重复的元素,上面的代码将无法工作。
ordered=[]
i=0
j=0
x = [100, 3, 4, 100, 34, 45]
lowest=x[0]
while len(x)>0:
for i in range(0,len(x)):
if x[i]<=lowest:
lowest=x[i]
ordered.append(lowest)
x.remove(lowest)
if len(x)>1:
lowest=x[0]
print(ordered)
def sort(x):
l=len(x)
for i in range(l):
for j in range((i+1),l):
if x[i]>x[j]:
l1=x[i]
x[i]=x[j]
x[j]=l1
print(x)
l=[8,4,2,6,5,1,12,18,78,45]
sort(l)
从列表中的第一个数字开始,运行一个循环以找到最低值。之后,将它们与列表中的第一个数字进行交换。对列表中的其余数字重复此循环方法。
nlist=[int(a) for a in input('Please insert your list of numbers ').split()]
for loop1 in range (0,len(nlist)-1): # outer loop
min=nlist[loop1]
for loop2 in range (loop1 + 1,len(nlist)): # inner loop to compare
if min > nlist[loop2]:
min=nlist[loop2]
index=loop2
if nlist[loop1] != min:
swap=nlist[loop1]
nlist[loop1]=min
nlist[index]=swap
print('Your hand-sorted list is',nlist)