퀵 정렬( Quick Sort)

Data structure 2019. 8. 14. 16:14
반응형

퀵 정렬(Quick Sort)
분할 정복 알고리즘의 하나, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법

과정 설명

    리스트 안에 있는 한 요소를 선택한다. 이렇게 고른 원소를 피벗(pivot) 이라고 한다.
    피벗을 기준으로 피벗보다 작은 요소들은 모두 피벗의 왼쪽으로 옮겨지고 피벗보다 큰 요소들은 모두 피벗의 오른쪽으로 옮겨진다. (피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽: 피벗보다 큰 요소들)
    피벗을 제외한 왼쪽 리스트와 오른쪽 리스트를 다시 정렬한다.
        분할된 부분 리스트에 대하여 순환 호출 을 이용하여 정렬을 반복한다.
        부분 리스트에서도 다시 피벗을 정하고 피벗을 기준으로 2개의 부분 리스트로 나누는 과정을 반복한다.
    부분 리스트들이 더 이상 분할이 불가능할 때까지 반복한다.
        리스트의 크기가 0이나 1이 될 때까지 반복한다.

https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html

 

[알고리즘] 퀵 정렬(quick sort)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://www.youtube.com/watch?v=7BDzle2n47c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 public class Solution5{
        public Solution5(){
            int[] arr = {3,9,4,7,5,0,1,6,8,2};
            this.QuickSort(arr);
            this.Print(arr);
        }
 
        private void QuickSort(int[] arr){
            this.QuickSort(arr, 0arr.Length-1);
        }
 
        private void  QuickSort(int[] arr, int start, int end){
            int part2 = this.Partition(arr, start, end);
            if(start<part2-1){
                this.QuickSort(arr, start, part2-1);
            }
            if(part2<end){
                this.QuickSort(arr, part2, end);
            }
        }
 
        private int Partition(int[] arr, int start, int end){
            int pivot = arr[(start+end)/2];
            while(start<=end) {
                while(arr[start] < pivot) start ++;
                while(arr[end] > pivot) end --;
                if(start <= end){
                    this.Swap(arr, start, end);
                    start++;
                    end--;
                }
            }
            return start;
        }
 
        private void Swap(int[] arr, int start, int end){
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
 
        private void Print(int[] arr){
            foreach(var data in arr){
                Console.Write(data + " ");
            }
        }
    }
 
 
반응형

'Data structure' 카테고리의 다른 글

Binary Search Tree  (0) 2020.05.29
이진 트리  (0) 2019.08.14
이진 탐색 (Binary Search)  (0) 2019.08.14
병합정렬 (Merge Sort)  (0) 2019.08.14
점화식  (0) 2019.08.14
: