정렬 3
정렬 3(퀵정렬)
출처 : (이코테 2021 강의 몰아보기) 4. 정렬 알고리즘
https://www.youtube.com/watch?v=KGyK-pNvWos&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4
퀵정렬
기준 데이터(피봇)를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법
일반적인 상황에서 가장 많이 사용되는 정렬 알고리즘 중 하나
가장 기본적인 퀵 정렬은 첫 번째 데이터를 기준 데이터(Pivot)로 설정
퀵 정렬은 평균의 경우 O(NlogN)의 시간 복잡도를 가짐
최악의 경우 O(N^2)의 시간 복잡도를 가짐 EX) 이미 정렬된 배열에 대해 첫 번째 원소를 피벗으로 삼을 때
코드
#퀵 정렬 1
array=[5,7,9,0,3,1,6,2,4,8]
def quick_sort(array,start,end):
if start>=end:
return
pivot=start
left=start+1
right=end
while(left<=right):
while(left<=end and array[left]<=array[pivot]):
left+=1
while(right>start and array[right]>=array[pivot]):
right-=1
if(left>right):
array[right],array[pivot]=array[pivot],array[right]
else:
array[left],array[right]=array[right],array[left]
quick_sort(array,start,right-1)
quick_sort(array,right+1,end)
quick_sort(array,0,len(array)-1)
print(array)
#퀵정렬 2
array=[5,7,9,0,3,1,6,2,4,8]
def quick_sort2(array):
if len(array)<=1:
return array
pivot=array[0]
tail=array[1:]
left_side=[x for x in tail if x<=pivot]
right_side=[x for x in tail if x>pivot]
return quick_sort2(left_side)+[pivot]+quick_sort2(right_side)
print(quick_sort2(array))