rhdtn311   3년 전

파이썬으로 퀵정렬 함수를 만들다가 오류가 발생하여 질문드립니다.

10번 줄에서 while left<= end and array[left] <= array[pivot] 을 하면 퀵정렬이 잘 작동하지만

while array[left] <= array[pivot] and left<=end 로 and 앞 뒤의 순서를 바꾸면 IndexError: list index out of range 오류가 발생합니다.

while 문의 조건에 and가 있으면 앞 뒤 두 값이 모두 참인 경우에만 while 문을 수행하는 것으로 알고 있습니다.

혹시 and의 순서가 어떤 의미를 갖고있는 건가요 ..? 

happiness96   3년 전

and를 기준으로 왼쪽의 조건이 False이거나 0의 값을 갖는다면 오른쪽의 조건이나 값을 보지않습니다.

즉, 왼쪽을 먼저 판별하기 때문에 while array[left] <= array[pivot] and left<=end의 경우에는 left<=end 조건을 보기 전에 이미 array[left] <= array[pivot] 여기서 left에 end 값을 초과하는 범위에 접근하게 됩니다.

rhdtn311   3년 전

와 좋은 정보 정말 감사합니다. 덕분에 답답한게 해결됐어요.

댓글을 작성하려면 로그인해야 합니다.