๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ œ์ž๋ฆฌ ์ •๋ ฌ In-Place Sorting

์ถœ์ฒ˜

ChatGPT


์ œ์ž๋ฆฌ ์ •๋ ฌ์ด๋ž€ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ (์ƒ์ˆ˜ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉ) ์›๋ž˜ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค. ์ฆ‰, ์ž…๋ ฅ ์ž๋ฃŒ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ตํ™˜ํ•˜๊ฑฐ๋‚˜ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ˆ์‹œ

๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort), ์„ ํƒ ์ •๋ ฌ(Selection Sort), ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort) ๋“ฑ์€ ์ œ์ž๋ฆฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋น„์ œ์ž๋ฆฌ ์ •๋ ฌ Out-Of-Place Sort

๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)๊ณผ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋น„์ œ์ž๋ฆฌ ์ •๋ ฌ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์ •๋ ฌ์„ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

 

์ œ์ž๋ฆฌ ์ •๋ ฌ์˜ ํŠน์ง•

์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ์Œ

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์ˆ˜ ๊ณต๊ฐ„(O(1))๋งŒ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ตํ™˜

์›๋ž˜ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฏ€๋กœ ์ž…๋ ฅ ๋ฐฐ์—ด ์™ธ์— ํฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

 

์ œ์ž๋ฆฌ ์ •๋ ฌ์˜ ์žฅ์ 

๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

์ œ์ž๋ฆฌ ์ •๋ ฌ์€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ์–ด ํšจ์œจ์ ์ด๋‹ค.

 

์˜ˆ์‹œ : ์„ ํƒ ์ •๋ ฌ Selection Sort

์„ ํƒ ์ •๋ ฌ์€ ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ฐ€์žฅ ์ž‘์€(๋˜๋Š” ๊ฐ€์žฅ ํฐ) ์š”์†Œ๋ฅผ ์ฐพ์•„ ๊ตํ™˜ํ•˜๋ฉด์„œ ์ œ์ž๋ฆฌ์—์„œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

public class SelectionSort {
    public static void selectionSort(int[] arr) {
        int n = arr.length;

        for (int i = 0; i < n - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            // ์ตœ์†Œ๊ฐ’์„ ํ˜„์žฌ ์œ„์น˜์™€ ๊ตํ™˜
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
    }
}