자료구조(data structure)
계수정렬 음수포함 (counting sort with negative numbers) - 파이썬(python)
진한색
2022. 12. 24. 11:15
음수포함된 리스트 정렬하는 계수정렬 (안정정렬)
def counting_sort_negative(lists):
if len(lists)<=1:
return lists
pos_max=max(lists)
neg_max=abs(min(lists))
pos_t=[0 for _ in range(pos_max+1)]
neg_t=[0 for _ in range(neg_max+1)]
for i in lists:
if i>=0:
pos_t[i]+=1
else:
neg_t[-i]+=1
for j in range(1,len(pos_t)):
pos_t[j]+=pos_t[j-1]
for k in range(1,len(neg_t)):
neg_t[k]+=neg_t[k-1]
if len(pos_t)==0:
result_pos=[]
else:
result_pos=[0]*pos_t[-1]
if len(neg_t)==0:
result_neg=[]
else:
result_neg=[0]*neg_t[-1]
#loop reverse lists and sort
# two part / pos and neg
for m in reversed(lists):
if m>=0:
result_pos[pos_t[m]-1]=m
pos_t[m]-=1
else:
result_neg[neg_t[-m]-1]=m
neg_t[-m]-=1
result=result_neg[::-1]+result_pos
return result
728x90