파이썬 질문있습니다.

파이썬 질문있습니다.

QA

파이썬 질문있습니다.

본문

import random

def QuickSort(aList, start, end):
    if start < end:
        pivot = partitionRand(aList, start, end)
        QuickSort(aList, start, pivot -1)
        QuickSort(aList, pivot + 1, end)

def partitionRand(aList, start, end): # pivot을 랜덤하게 뽑기 위해서 사용
    rand_pivot = random.randrange(start, end, 1)
    aList[start], aList[rand_pivot] = aList[rand_pivot], aList[start]
    return partition(aList, start, end)

def partition(aList, start, end):
    leftM = start + 1; rightM = end;
    while True:
        while (leftM < end)and(aList[leftM] < aList[start]): leftM += 1;
        while (start < rightM)and(aList[start] < aList[rightM]): rightM -= 1;
        if leftM >= rightM: break;
        aList[leftM], aList[rightM] = aList[rightM], aList[leftM]
        leftM += 1; rightM -= 1;
    aList[start], aList[rightM] = aList[rightM], aList[start]
    return rightM
    
def QuickSelect(aList, start, end, s):
    pivot = partitionRand(aList, start, end)
    if s < pivot: return QuickSelect(aList, start, pivot - 1, s);
    elif pivot < s: return QuickSelect(aList, pivot + 1, end, s);
    else: return aList[pivot];
    
dataList = [2,0,2,0,1,2,3,4,5,6]
QuickSort(dataList, 0, len(dataList) - 1)
print(dataList)
if len(dataList) % 2 == 0: # 데이터 개수가 홀수, 짝수일때 모두 만족하도록 조건문을 사용 
    resultValue1 = QuickSelect(dataList, 0, len(dataList) - 1, (len(dataList)/2) - 1)
    resultValue2 = QuickSelect(dataList, 0, len(dataList) - 1, len(dataList)/2)
    Median = (resultValue1 + resultValue2) / 2
else:
    resultValue = QuickSelect(dataList, 0, len(dataList) - 1, len(dataList)//2)
    Median = resultValue
print("중앙값(median):",Median)

 

--------------------------------------------------------------------------------------------------------

퀵소트와 퀵셀렉트를 이용한 이용하여 데이터의 중앙값을 구하는 코드를 작성하였습니다.

 

그런데 코드를 실행할때마다

정상적으로 실행이 되기도하고 ValueError: empty range for randrange() (5,5, 0) 오류가 뜨기도 합니다.

어떻게 오류를 해결할 수 있을까요

이 질문에 댓글 쓰기 :

답변 1

답변을 작성하시기 전에 로그인 해주세요.
전체 208
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT