群里有同行遇到這樣一個面試題:有一個整數構成的列表,需要給這個列表進行從小到大存入到另一個列表中。
本身排序可以用python的內置函數sort和sorted,但題目的要求是手動實現。
看起來很簡單,實現的發現並不容易,花了半個小時才調試好。
解題思路:
1.將列表中的第1個元素放入新列表,然后將元素的索引存入索引列表,然后遍歷列表,如有比新列表最后一個元素小,那做替換動作,索引也要做替換動作。然后將列表第2個元素放入新列表,然后遍歷列表進行第2個元素的比較。。。
直接上代碼:
def MySort(list):
newlist = []
indexlist = []
for i in range(len(list)):
print("第%d個元素操作:" % (i+1))
flag = 0
for j in range(len(list)):
try:
if flag == 0 and j not in indexlist:
print("將第一個元素且未存入新列表的元素%d暫存入新列表" % list[j])
newlist.append(list[j])
print("索引%d暫存入到索引列表" %j)
indexlist.append(j)
flag =1
elif list[j] < newlist[i] and flag == 1:
print("遍歷列表,發現新元素%d更小" % list[j])
if j not in indexlist:
print("新元素%d替換暫存元素%d" % (list[j],newlist[i]))
newlist.remove(newlist[i])
newlist.append(list[j])
indexlist.remove(indexlist[len(indexlist) - 1])
indexlist.append(j)
else:
print("元素%d的索引%d已經在新列表中,不能重復存入" % (list[j],j))
except IndexError as f:
pass
print("當前索引列表是:%s" % indexlist)
print("新列表元素是%s:"%newlist)
print("----------------------------------")
return newlist
oldlist = [0,6,100,0,1,5,2,4,1,14,2,-1]
newlist = MySort(oldlist)
print(newlist)
