๐Ÿ’ก Algorithm

[Sort] ์ •๋ ฌ

jcowwk 2025. 2. 3. 18:23

์ •๋ ฌ


1. ๋ฒ„๋ธ” ์ •๋ ฌ

2. ์„ ํƒ ์ •๋ ฌ

3. ์‚ฝ์ž… ์ •๋ ฌ

4. ๋ณ‘ํ•ฉ ์ •๋ ฌ

5. ํ€ต ์ •๋ ฌ

6. ํž™ ์ •๋ ฌ


1. ๋ฒ„๋ธ” ์ •๋ ฌ

์ธ์ ‘ํ•œ ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ํฐ ๊ฐ’์„ ๋’ค๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ

 

- ๋™์ž‘ ๊ณผ์ •

1. ๋ฐฐ์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ ์ธ์ ‘ํ•œ ๋‘ ์š”์†Œ๋ฅผ ๋น„๊ต

2. ์•ž ์š”์†Œ๊ฐ€ ๋’ค ์š”์†Œ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์œ„์น˜ ๊ตํ™˜

3. ํ•œ ๋ฒˆ์˜ ์ˆœํšŒ๊ฐ€ ๋๋‚˜๋ฉด ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋ฐฐ์—ด์˜ ๋์œผ๋กœ ์ด๋™

4. ์ด๋ฅผ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

- ์ฝ”๋“œ ๊ตฌํ˜„

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

 

2. ์„ ํƒ ์ •๋ ฌ

๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ์ฐพ์•„ ๋งจ ์•ž์˜ ์š”์†Œ์™€ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ

 

- ๋™์ž‘ ๊ณผ์ •

1. ๋ฐฐ์—ด์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๊ตํ™˜

2. ๋‹ค์Œ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ ๋‘ ๋ฒˆ์งธ ์š”์†Œ์™€ ๊ตํ™˜

3. ์ด๋ฅผ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต 

 

- ์ฝ”๋“œ ๊ตฌํ˜„

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[minIdx];
        arr[minIdx] = temp;
    }
}

 

3. ์‚ฝ์ž… ์ •๋ ฌ

ํ˜„์žฌ ์š”์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋ฉฐ ์ •๋ ฌ

 

- ๋™์ž‘ ๊ณผ์ •

1. ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์•ž์˜ ์š”์†Œ๋“ค๊ณผ ๋น„๊ต

2. ์ž์‹ ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋งŒ๋‚˜๋ฉด ๋’ค๋กœ ์ด๋™

3. ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…

 

- ์ฝ”๋“œ ๊ตฌํ˜„

void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

 

4. ๋ณ‘ํ•ฉ ์ •๋ ฌ

๋ถ„ํ•  ์ •๋ณต(Divide and Conquer) ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ •๋ ฌ ํ›„ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹

 

- ๋™์ž‘ ๊ณผ์ •

1. ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ

2. ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นจ

 

- ์ฝ”๋“œ ๊ตฌํ˜„

void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;
    int L[n1], R[n2];

    for (int i = 0; i < n1; i++) L[i] = arr[left + i];
    for (int i = 0; i < n2; i++) R[i] = arr[mid + 1 + i];

    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) arr[k++] = L[i++];
        else arr[k++] = R[j++];
    }
    while (i < n1) arr[k++] = L[i++];
    while (j < n2) arr[k++] = R[j++];
}

void mergeSort(int arr[], int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }
}

 

5. ํ€ต ์ •๋ ฌ

ํ”ผ๋ฒ—(pivot)์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์€ ๊ฐ’๊ณผ ํฐ ๊ฐ’์„ ๋ถ„ํ• ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹

 

- ๋™์ž‘ ๊ณผ์ •

1. ๋ฐฐ์—ด์—์„œ ์ž„์˜์˜ ํ”ผ๋ฒ—์„ ์„ ํƒ

2. ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ถ„ํ• 

3. ๊ฐ ๋ถ€๋ถ„์„ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ 

 

- ์ฝ”๋“œ ๊ตฌํ˜„

int partition(int arr[], int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

 

6. ํž™ ์ •๋ ฌ

ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์ตœ๋Œ€๊ฐ’ ๋˜๋Š” ์ตœ์†Œ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ์ •๋ ฌ

 

- ๋™์ž‘ ๊ณผ์ •

1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ตœ๋Œ€ ํž™์œผ๋กœ ๋ณ€ํ™˜

2. ๋ฃจํŠธ ๊ฐ’์„ ๊บผ๋‚ด๊ณ  ํž™์„ ์žฌ๊ตฌ์„ฑ

3. ์ด๋ฅผ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต 

 

- ์ฝ”๋“œ ๊ตฌํ˜„

void heapify(int arr[], int n, int i) {
    int largest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;

    if (left < n && arr[left] > arr[largest])
        largest = left;
    if (right < n && arr[right] > arr[largest])
        largest = right;
    if (largest != i) {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;
        heapify(arr, n, largest);
    }
}

void heapSort(int arr[], int n) {
    for (int i = n / 2 - 1; i >= 0; i--)
        heapify(arr, n, i);
    for (int i = n - 1; i > 0; i--) {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        heapify(arr, i, 0);
    }
}

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

 

๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sorting Algoritm) ์š”์•ฝ ์ •๋ฆฌ (์„ ํƒ, ์‚ฝ์ž…, ๋ฒ„๋ธ”, ํ•ฉ๋ณ‘, ํ€ต) v1.1

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ธฐ์ค€์— ๋งž๊ฒŒ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด์„, ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ์กฐ๊ฑด์œผ๋กœ

hsp1116.tistory.com

 

๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3