정렬 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))





© 2021.07. by 전은성

Powered by 전은성