我正在尝试编码一个排序功能程序,但是我遇到了一个问题,在我认为不应该的情况下, randomdata
变量正在更改。
下面的代码不会运行,因为合并排序导致randomdata
出于没有明显的原因在2D列表中...
python为什么这样做的任何帮助将不胜感激!
from random import randint
from math import ceil
size = int(input("Sample size: "))
maximum = int(input("Range of numbers: "))
randomdata = [randint(0, maximum) for _ in range(size)]
print("DATA", randomdata)
def bubble(data):
comparisons = 0
length = len(data)
for _ in range(length - 1):
for i in range(length - 1):
if data[i] > data[i+1]:
hold = data[i]
del data[i]
data.insert(i+1, hold)
comparisons += 1
return comparisons, data
def mergefunction(data1, data2):
if type(data1) != type([]):
data1 = [data1]
if type(data2) != type([]):
data2 = [data2]
comparisons = 0
merged = list()
while len(data1) > 0 and len(data2) > 0:
#print("DATA 1", data1)
#print("DATA 2", data2)
if data1[0] < data2[0]:
merged.append(data1[0])
del data1[0]
else:
merged.append(data2[0])
del data2[0]
comparisons += 1
merged += data1
merged += data2
#print("COMPS", comparisons)
#print("SORT", merged)
return comparisons, merged
def merge(data):
comparisons = 0
while len(data) > 1:
#print("DATA", data)
for i in range(0, ceil(len(data)/2), 1):
#print("I", i)
try:
compadd, merged = mergefunction(data[i], data[i+1])
del data[i], data[i]
data.insert(i, merged)
comparisons += compadd
except IndexError:
pass
return comparisons, data[0]
def insrt(data):
sorteddata = [-10000000]
comparisons = 0
for item in data:
print("ITEM", item)
for i in range(len(sorteddata)):
#print(item, sorteddata[i])
if item > sorteddata[i]:
sorteddata.insert(i+1, item)
comparisons += 1
break
comparisons += 1
del sorteddata[0]
print(sorteddata)
return comparisons, sorteddata
print("="*10,"BUBBLE","="*10)
print("RANDOM", randomdata)
comps, data = bubble(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)
print("="*10,"MERGE","="*10)
print("RANDOM", randomdata)
comps, data = merge(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)
print("="*10,"INSERT","="*10)
print("RANDOM", randomdata)
comps, data = insrt(randomdata)
print("COMPARISONS", comps)
print("SORTED DATA", data)
python 3.6.1抱歉,此代码与辩论者乱扔垃圾...
执行comps, data = bubble(randomdata)
时,您将randomdata
的引用传递给bubble()
,因为randomdata
是list
,这意味着可变,然后您对data
中的CC_8中的所有更改反映在randomdata
中,。您需要使用randomdata
的副本。类似:data = data[:]
bublle()