- Joined
- May 11, 2022
- Messages
- 66
- Reaction score
- 6
so i had the idea of taking quicksort and making the number of pivots scale to the size of the input logarithmically.
here is the result:
here is the result:
Python:
import math, random
def prettyQuick(data):
if len(data) < 16:
for i in range(1,len(data)):
j = i
while data[j] < data[j-1] and j > 0:
data[j], data[j-1] =data[j-1], data[j]
j-=1
return(data)
totpivit = int(math.log(len(data),4))
pivits = []
for i in range(0,totpivit):
pivits += [data[random.randint(0,len(data)-1)]]
for i in range(len(pivits),-1,-1):
for j in range(0,i-1):
if pivits[j] > pivits[j+1]:
pivits[j], pivits[j+1] = pivits[j+1], pivits[j]
data = orderT(data,pivits)
return data
def orderT(data,pivits):
bucket = []
for i in range(0,len(pivits)+1):
bucket += [[]]
for i in range(0,len(data)):
gotHere = True
for j in range(0,len(pivits)):
if data[i] <pivits[j]:
bucket[j] += [data[i]]
gotHere = False
break
if gotHere == True:
bucket[-1] +=[data[i]]
result = []
for i in range(0, len(bucket)):
if bucket[i] == []:
continue
result += prettyQuick(bucket[i])
return result
data = list(range(0,1000))
random.shuffle(data)
print(data)
data =prettyQuick(data)
print(data)
Last edited: