퀵정렬 2

[JAVA] 퀵 정렬 (Quick Sort)

퀵 정렬은 피벗을 기준으로 두개의 부분리스트로 나누어 하나는 피벗보다 작은 값들의 부분리스트, 다른 하나는 피벗보다 큰 값들의 부분리스트로 정렬한 다음, 각 부분리스트에 대해 다시 재귀적으로 수행하여 정렬하는 방법이다. 1. 피벗을 하나 선택한다. 2. 피벗을 기준으로 양쪽에서 피벗보다 큰 값, 혹은 작은 값을 찾는다. 왼쪽에서부터는 피벗보다 큰 값을 찾고, 오른쪽에서 부터는 피벗보다 작은 값을 찾는다. 3. 양 방향에서 찾은 두 원소를 교환한다. 4. 왼쪽에서 탐색하는 위치와 오른쪽에서 탐색하는 위치가 엇갈리지 않을 대 까지 2번으로 돌아가 위 과정을 반복한다. 5. 엇갈린 기점을 기준으로 두 개의 부분리스트로 나누어 1번으로 돌아가 해당 부분리스트의 길이가 1이 아닐 때 까지 1번 과정을 반복한다. ..

Language/Java 2022.12.14

정렬 알고리즘 [선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬]

1. 선택 정렬 (selection sort) 첫 번째 값을 두 번째 값부터 마지막 값까지 차례대로 비교해 가장 작은 값을 찾아 첫 번째 값과 자리 변경하고, 두 번째 값을 세 번째 값부터 마지막 값까지 차례대로 비교해 가장 작은 값을 찾아 두 번째 값과 자리 변경.. 이 과정을 반복하며 정렬을 수행한다. 시간복잡도 O(N^2) array = [7,5,9,0,3,1,6,2,4,8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j # 스와프 array[i], array[min_index] = array[min_i..

Algorithm/algorithm 2022.08.16