Quick sort '์๊ณ ๋ฆฌ์ฆ' ์ ๊ณต ์์ ์๊ฐ์ ๋์จ ๊ณผ์ ์ธ '1000๋ง๊ฐ ๋ฐ์ดํฐ ์ ๋ ฌ ํ ํด์ ๊ฐ ๊ตฌํ๊ธฐ'๋ฅผ ํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค. ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ํตํด ๊ตฌํ๋๋ ์ ๋ ฌ ๋ฐฉ๋ฒ ์๊ฐ ๋ณต์ก๋ ์ต์ : O(n^2) ํ๊ท : O(nlogn) ์ค๊ณ๋ฅผ ํตํด์ ๊ฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ ๊ตฌํ ๊ณผ์ pivot์ ์ ํํ๋ค. ์์ชฝ ํฌ์ธํฐ๊ฐ ๋ฎ์ ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ํผ๋ฒ๋ณด๋ค ์์ ์๋ฅผ ์ฐพ๋๋ค. ์๋์ชฝ ํฌ์ธํฐ๊ฐ ๋์ ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ํผ๋ฒ๋ณด๋ค ํฐ ์๋ฅผ ์ฐพ๋๋ค. ๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์๋ฅผ ๊ตํํ๋ค. 2-4๋ฅผ ๋ฐ๋ณตํ๋ค. ๋ ํฌ์ธํฐ๊ฐ ๊ต์ฐจํ๋ค๋ฉด ํ์ฌ ํผ๋ฒ๊ณผ ํด๋น ์์น์ ๊ฐ์ ๊ตํํ๋ค. ํผ๋ฒ๊ณผ ํผ๋ฒ๋ณด๋ค ์์ section, ํผ๋ฒ๋ณด๋ค ํฐ section์ผ๋ก ๋๋๊ณ ๊ฐ section์ ๋ํด 1-5๋ฅผ ์คํํ๋ค. section์ ํฌ๊ธฐ๊ฐ 0 ๋๋ 1์ด๋ฉด ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCEHfI%2FbtqC1HhFJ6i%2Fl1NRYTHfdpSa8nmAFJeUrk%2Fimg.png)
QuickSort ๋ ผ๋ฌธ brief Part One: Theory ์ด sorting์ ๋ ๊ฐ์ ๊ฐ๋จํ ๋ณด์กฐ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐ๋ ์ ์๋๋ฐ, ๊ฐ ๋ฌธ์ ๋ ์ด๋ฏธ ์๋ ค์ง ๋ฐฉ์์ผ๋ก ํ ์ ์๋ค. Partition : key๊ฐ์ dividing line์ ๋ฐ๋ผ ์ ์๋๋ก ๋๋์ด ์ด๋ถํ๋ ๊ฒ ์ค์ ๋ก ์ด dividing line์ ํ์น ์๊ณ , ์๋ค ํ ์ง๋ผ๋ ์ฐพ๊ธฐ ํ๋ ๋ฐ dividing line์ด ์กด์ฌํ๊ณ ๊ทธ๊ฒ์ ์์น๋ง ์๋ค๋ฉด item๋ค์ ์ฌ์ ๋ ฌํ๊ธฐ๋ ์ฌ์์ง๋ค. partition ๊ณผ์ ์ ๋ ฌ๋์ด์ผํ๋ ์์ดํ ์ ํค ์ค ํน์ ํค๋ฅผ ๊ณ ๋ฅธ๋ค. ์ด ํค๋ bound ๋ผ ๋ถ๋ฆฐ๋ค. dividing line ์๋์๋ bound๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ key๊ฐ์ด, ์์ชฝ์๋ ํฐ key ๊ฐ์ด ์ค๊ฒ ํ๋ค. dividing line์ ์์น๋ ๋ฏธ๋ฆฌ ์ ํ์..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F26rny%2FbtqCZ1f9LbY%2FvEk3ufkpkrPXJYVZeMq4w0%2Fimg.png)
/* 2020-03-19 ์ฐํฌ์ ์ฝ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ */ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include int buffer[10000000]; // ์ ์ญ ๋ณ์๋ก ๋ฃ์ด์ผ stack overflow๊ฐ ๋์ง ์์ void fileOpen() { FILE *fp = fopen("d://algorithm/unsorted10000000.txt", "r"); int i = 0; int tmp = 0; if (fp == NULL) { printf("ํ์ผ์ ์ด ์ ์์ต๋๋ค.\n"); } while (fscanf(fp, "%d ", &tmp)!=EOF) { buffer[i++] = tmp; } fclose(fp); } void insertSortin..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfmOsF%2FbtqCX8fYV43%2FgieJle6PFeoV5WF0hILG6K%2Fimg.png)
์ฒซ๋ฒ์งธ ๊ณผ์ ์ด๋ค. ์๊ฐ ๋ณต์ก๋๊ฐ f(n)์ธ ์๊ณ ๋ฆฌ์ฆ์ ์์์๊ฐ์ด 1 nanosecond == 10^(-9) second ์ด๋ผ๊ณ ํ ๋, ์ผ์ชฝ์ ํ์๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์ชฝ์ ์๊ฐ ๋ด์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฃ๋๋ ค๋ฉด ์ต๋๋ก ์ด๋ค N๊น์ง ๊ณ์ฐํ ์ ์์์ง ์์๋ณด์. ๋ํ๋ก ํ๋๋ฅผ ๊ณ์ฐํด๋ณด๋ฉด 1sec๋ 10^(9) nanosec ์ด๋ฏ๋ก n^2์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ์์ n^2 = 10^(9) ๋ก ๋๊ณ ํ๋ฉด 1sec ๋ง์ ๊ณ์ฐ๋ ์ ์๋ n ๊ฐ์ด ๋์จ๋ค. n ๊ฐ์ ๋ชจ๋ ์ ์๋ก ๊ฐ์ ํ์๋ค.
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPqYhK%2FbtqCFx9FvGs%2FhTnIcwDGrurwwTwMeyxyI0%2Fimg.png)
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ https://www.acmicpc.net/blog/view/9 ๋ฐฑ์ค๋ ๊ธ ๋ฐฐ์ด ํฌ๊ธฐ ๊ฒฐ์ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ C++์ ๊ฒฝ์ฐ, vector ์๋ฃํ์ ์ฌ์ฉํ๋๋ฐ python์ผ๋ก ๊ตฌํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ผ๋ง๋ ๋์ด์ผ ํ ์ง ๊ฐ๋ ํ๊ธฐ ์ํด ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํด๋ณด์. 2์ ์ ๊ณฑ ์๊ฐ ๋ฆฌํ ๋ ธ๋์ ์(n)๋ก ์ฃผ์ด์ง๋ค๋ฉด ( ๋ถ์ํด์ผํ data ๊ฐฏ์๊ฐ 2์ ์ ๊ณฑ ์๋ผ๋ฉด ) ๊ฐ ๋จ๊ณ๋ง๋ค 1/2์ฉ ์ค์ด๋๊ฐ๋ฏ๋ก log(n)์ด ํ์ํ ์ด ๋จ๊ณ(ํ์ดํ)๊ฐ ๋๊ณ ์ ์ฒด ์ธต์ ๊ฐฏ์, ์ฆ ๋์ด(h)๋ log(n)+1์ด ๋๋ค. ์ต์์ ๋ ธ๋๋ถํฐ 2^(0)๊ฐ์ ๋ ธ๋๋ก ์์ํ์ฌ ์ธต์ด ์ฆ๊ฐํ ์๋ก 2์ ์ง์ ๋ํ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ฝ์ฐฌ ์ด์ค ํธ๋ฆฌ(full binary tree)์ ์ด ๋ ธ๋ ..
Comment