我试图编写一个排序函数程序,但是我遇到了一个问题,randomdata
变量被更改到了我认为不应该更改的地方。你知道吗
下面的代码不会运行,因为合并排序会导致randomdata
在二维列表中,没有明显的原因。。。你知道吗
任何帮助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
,这意味着是可变的,那么您对bubble()
内的data
所做的所有更改都反映在randomdata
。您需要使用randomdata
的副本。类似于:data = data[:]
内部bublle()
相关问题 更多 >
编程相关推荐