Sorting
์ด๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค ์์ (์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ๋ฑ๋ฑ) ์ ๋ง๊ฒ ์๋ก ์ ๋ฆฌํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
์ ๋ ฌ ์๋
Big-O ํ๊ธฐ๋ฒ
์๊ฐ ๋ณต์ก๋ ๋ฐ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ ์์นํํ์ฌ ํ๊ธฐํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฑ๋ฅ์ ๊ธฐ์ค์ผ๋ก ํ๊ท ์ ์ธ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ธ๊ฒ์ผ๋ก ์ต์ ๋ฐ ์ต์ ์ ์๋ฅผ ํํํ๋ค.
ํต ์ ๋ ฌ (Quick Sort)
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ค์์ ๊ฐ์ฅ ๋น ๋ฅธ ์ ๋ ฌ์ด๋ค.
๊ธฐ์ค์ด ๋๋ ํผ๋ฒ ๋
ธ๋์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ข์ฐ๋๋ค.
์๊ฐ ๋ณต์ก๋
- ํ๊ท
O(n log n)
๋ก ์์๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ ๋๋ ์ด๋ณด๋ค ๋น ๋ฅด๋ค. - ์ต์
์ ๊ฒฝ์ฐ์๋
O(n^2)
์ผ๋ก ์์
ํน์ด์ฌํญ
- ๊ธฐ์ค์ด ๋๋ Pivot ๋ ธ๋์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๋ค.
๋จธ์ง ์ ๋ ฌ (Merge Sort)
์ ๋ ฌํ๋ ค๋ ๋ฐฐ์ด์ ๋ฐ์ผ๋ก ๋๋ ์ต์์ ํํฐ์ ์ผ๋ก ๋๋๊ณ ์ ๋ ฌํ ํ ๋จธ์งํ๋ฉด์ ์ ๋ ฌ
์๊ฐ ๋ณต์ก๋
O(n log n)
์ผ๋ก ํต ์ ๋ ฌ๊ณผ ๊ฐ๋ค.
ํน์ด์ฌํญ
- ๋ณ๋์ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ ํ๋ค.
Case 1 : JS - ES5
var arr = [6, 3, 8, 4, 1, 9, 2, 5, 7, 0];
function MergeSort(arr) {
this.arr = null;
if (arr instanceof Array) {
this.arr = arr;
return this.sort(arr);
}
}
MergeSort.prototype = (function () {
function sort(arr) {
if (typeof arr === 'undefined' || !(arr instanceof Array)) {
if (!(this.arr instanceof Array)) {
throw new Error('Array object is not exist');
}
arr = this.arr;
}
if (arr.length === 1) {
return arr;
}
var mid = Math.floor(arr.length / 2),
left = arr.slice(0, mid),
right = arr.slice(mid);
return merge(sort(left), sort(right));
}
function merge(left, right) {
var answer = [],
leftLength = left.length,
rightLength = right.length,
leftIdx = 0,
rightIdx = 0;
while (leftIdx < leftLength && rightIdx < rightLength) {
if (left[leftIdx] < right[rightIdx]) {
answer.push(left[leftIdx]);
leftIdx++;
} else {
answer.push(right[rightIdx]);
rightIdx++;
}
}
return answer.concat(left.slice(leftIdx), right.slice(rightIdx));
}
return {
sort: sort
};
}());
console.log(new MergeSort(arr));
var ms = new MergeSort();
console.log(ms.sort(arr));
์ฝ์ (Insertion)
์ ์ฒด์์์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๊ตํํ๋ ๋ฐฉ์
const array = [5, 3, 1, 4, 2];
let len = array.length, i = 1, j, temp;
for (; i < len; ++i) {
temp = array[i];
j = i;
while (j > 0 && array[j - 1] > temp) {
array[j] = array[j - 1];
j--;
cnt++;
}
array[j] = temp;
}
console.log(array.join(' '));
์ ํ (Selection)
์ ์ฒด ์์์์ ๊ธฐ์ค ์์น์ ๋ง๋ ์์๋ฅผ ์ ํํ์ฌ ๊ตํํ๋ ๋ฐฉ์
๋ฒ๋ธ (Bubble)
์ผ์ชฝ ๋์์ ๋ถํฐ ์ธ์ ํ๋ ๋ ํญ๋ชฉ์ ๊ฐ์ ๋น๊ตํ์ฌ ์๋ก ์์น๋ฅผ ๊ตํํ๋ ์ ๋ ฌ ๋ฐฉ๋ฒ