I. μκ°
STL(Standard Template Library)μ C++μμ μ 곡νλ νμ€ λΌμ΄λΈλ¬λ¦¬λ‘, λ€μν λ°μ΄ν° ꡬ쑰μ μκ³ λ¦¬μ¦μ ν¬ν¨νκ³ μμ΅λλ€. μ΄λ¬ν STLμ κ°λ°μλ€μκ² νΈλ¦¬ν κΈ°λ₯μ μ 곡νμ¬ μ½λ μμ±μ κ°νΈνκ² λ§λ€μ΄μ€λλ€. κ·Έ μ€μμλ sort ν¨μλ μ λ ¬ μκ³ λ¦¬μ¦μ ꡬνν΄μ£Όλ κΈ°λ₯μΌλ‘ λ§μ΄ μ¬μ©λλ ν¨μμ λλ€. sort ν¨μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν μ μμΌλ©°, μ΄λ² κΈμμλ sort ν¨μμ μ¬μ©λ²κ³Ό μμ λ₯Ό μκ°νλλ‘ νκ² μ΅λλ€.
sort ν¨μλ ν νλ¦Ώ ν¨μλ‘, λ€μν μλ£νμ λν΄μλ μ¬μ©ν μ μμ΅λλ€. μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν λμλ μ μ© κ°λ₯νλ©°, μ¬μ©λ²μ λ°λΌ λ€μν μ λ ¬ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€. λ€μμΌλ‘ μ€λ¦μ°¨μ μ λ ¬κ³Ό λ΄λ¦Όμ°¨μ μ λ ¬μ λν΄ μμΈν μμ보λλ‘ νκ² μ΅λλ€.
II. μ€λ¦μ°¨μ μ λ ¬
μ€λ¦μ°¨μ μ λ ¬μ λ°μ΄ν°λ₯Ό μμ κ°λΆν° ν° κ°μ μμλ‘ μ λ ¬νλ κ²μ μλ―Έν©λλ€. C++μ STLμμλ sort ν¨μλ₯Ό μ¬μ©νμ¬ μ€λ¦μ°¨μμΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν μ μμ΅λλ€.
sort ν¨μλ <algorithm>
ν€λ νμΌμ μ μΈλμ΄ μμΌλ©°, μλμ κ°μ ννλ‘ μ¬μ©λ©λλ€:
#include <algorithm>
sort(start, end);
μ¬κΈ°μ start
μ end
λ μ λ ¬νκ³ μ νλ λ°μ΄ν°μ λ²μλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μ(iterator)μ
λλ€. start
λ μ λ ¬μ μμν μμΉλ₯Ό κ°λ¦¬ν€κ³ , end
λ μ λ ¬μ μ’
λ£ν μμΉλ₯Ό κ°λ¦¬ν΅λλ€.
μλ₯Ό λ€μ΄, λ°°μ΄ ννλ‘ λ°μ΄ν°κ° μ£Όμ΄μ‘μ λ, λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό start
λ‘ μ§μ νκ³ , λ°°μ΄μ λ§μ§λ§ μμμ λ€μ μμΉλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό end
λ‘ μ§μ νμ¬ sort ν¨μλ₯Ό νΈμΆνλ©΄, λ°°μ΄μ μμλ€μ΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ©λλ€.
μλλ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ μμ μ½λμ λλ€:
#include <iostream>
#include <algorithm>
int main() {
int arr[] = {5, 2, 9, 7, 1};
int size = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + size);
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
μ μ½λλ₯Ό μ€ννλ©΄, μΆλ ₯κ²°κ³Όλ 1 2 5 7 9
κ° λ κ²μ
λλ€. μ λ ¬λ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
sort ν¨μλ κΈ°λ³Έμ μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λλ©°, λ°μ΄ν° νμ λ°λΌ μ‘°κΈ λ€λ₯Έ λμμ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ¬Έμμ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νκ³ μ ν λμλ sort ν¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€. λν, μ¬μ©μ μ μλ ꡬ쑰체λ ν΄λμ€μ λν΄μλ sort ν¨μλ₯Ό μ¬μ©ν μ μμΌλ©°, μ΄ κ²½μ°μλ μ λ ¬ κΈ°μ€μ μ§μ ν΄μ£Όμ΄μΌ ν©λλ€. μ΄νμμλ λ΄λ¦Όμ°¨μ μ λ ¬μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€.
III. λ΄λ¦Όμ°¨μ μ λ ¬
λ΄λ¦Όμ°¨μ μ λ ¬μ λ°μ΄ν°λ₯Ό ν° κ°λΆν° μμ κ°μ μμλ‘ μ λ ¬νλ κ²μ μλ―Έν©λλ€. C++μ STLμμλ sort ν¨μλ₯Ό μ¬μ©νμ¬ λ΄λ¦Όμ°¨μμΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν μ μμ΅λλ€.
λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νκΈ° μν΄μλ sort ν¨μμ μΈ λ²μ§Έ μΈμλ‘ λΉκ΅ ν¨μλ₯Ό μ λ¬ν΄μ£Όμ΄μΌ ν©λλ€. λΉκ΅ ν¨μλ λ κ°μ μμλ₯Ό λΉκ΅νμ¬ μ λ ¬ μμλ₯Ό κ²°μ νλ μν μ ν©λλ€. μ΄ λΉκ΅ ν¨μλ₯Ό μ¬μ©νμ¬ sort ν¨μμ λ΄λ¦Όμ°¨μμ μ§μ ν μ μμ΅λλ€.
sort ν¨μμ ννλ λ€μκ³Ό κ°μ΅λλ€:
#include <algorithm>
sort(start, end, compare);
start
μ end
λ μ λ ¬νκ³ μ νλ λ°μ΄ν°μ λ²μλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μμ΄κ³ , compare
λ λΉκ΅ ν¨μμ
λλ€. λΉκ΅ ν¨μμ ννλ μλμ κ°μ΅λλ€:
bool compare(const Type& a, const Type& b);
μ΄ λΉκ΅ ν¨μλ a
μ b
λΌλ λ κ°μ μμλ₯Ό λΉκ΅νμ¬ μ λ ¬ μμλ₯Ό κ²°μ ν©λλ€. λ§μ½ a
κ° b
λ³΄λ€ μλ€λ©΄ trueλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ falseλ₯Ό λ°νν©λλ€.
λ°λΌμ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νκΈ° μν΄μλ λΉκ΅ ν¨μκ° a
κ° b
λ³΄λ€ ν° κ²½μ°μ trueλ₯Ό λ°ννλλ‘ ν΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, μλ μ½λλ λ°°μ΄μ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ μμ μ λλ€:
#include <iostream>
#include <algorithm>
bool compare(const int& a, const int& b) {
return a > b;
}
int main() {
int arr[] = {5, 2, 9, 7, 1};
int size = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + size, compare);
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
μ μ½λλ₯Ό μ€ννλ©΄, μΆλ ₯κ²°κ³Όλ 9 7 5 2 1
κ° λ κ²μ
λλ€. λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬λ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
λΉκ΅ ν¨μλ μλ£νμ λ°λΌ ꡬν λ°©μμ΄ λ€λ₯Ό μ μμΌλ©°, λ¬Έμμ΄μ΄λ μ¬μ©μ μ μλ ꡬ쑰체μ λν΄μλ λ΄λ¦Όμ°¨μ μ λ ¬μ ꡬνν μ μμ΅λλ€. μ΄λ κ² sort ν¨μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν μ μμ΅λλ€.
IV. sort ν¨μ μ¬μ©λ²
sort ν¨μλ C++μ STL(Standard Template Library)μμ μ 곡νλ ν¨μλ‘, λ°μ΄ν°λ₯Ό μ λ ¬νκΈ° μν΄ μ¬μ©λ©λλ€. sort ν¨μλ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν μ μμ΅λλ€.
sort ν¨μλ <algorithm>
ν€λ νμΌμ μ μΈλμ΄ μμΌλ©°, μλμ κ°μ ννλ‘ μ¬μ©λ©λλ€:
#include <algorithm>
sort(start, end);
μ¬κΈ°μ start
μ end
λ μ λ ¬νκ³ μ νλ λ°μ΄ν°μ λ²μλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μ(iterator)μ
λλ€. start
λ μ λ ¬μ μμν μμΉλ₯Ό κ°λ¦¬ν€κ³ , end
λ μ λ ¬μ μ’
λ£ν μμΉλ₯Ό κ°λ¦¬ν΅λλ€.
μλ₯Ό λ€μ΄, λ°°μ΄ ννλ‘ λ°μ΄ν°κ° μ£Όμ΄μ‘μ λ, λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό start
λ‘ μ§μ νκ³ , λ°°μ΄μ λ§μ§λ§ μμμ λ€μ μμΉλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό end
λ‘ μ§μ νμ¬ sort ν¨μλ₯Ό νΈμΆνλ©΄, λ°°μ΄μ μμλ€μ΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ©λλ€.
μλλ sort ν¨μλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ μμ μ½λμ λλ€:
#include <iostream>
#include <algorithm>
int main() {
int arr[] = {5, 2, 9, 7, 1};
int size = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + size);
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
μ μ½λλ₯Ό μ€ννλ©΄, μΆλ ₯κ²°κ³Όλ 1 2 5 7 9
κ° λ κ²μ
λλ€. λ°°μ΄μ΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
sort ν¨μλ κΈ°λ³Έμ μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λλ©°, λ°μ΄ν°μ νμ λ°λΌ μ‘°κΈ λ€λ₯Έ λμμ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ¬Έμμ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νκ³ μ ν λμλ sort ν¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€. λν, μ¬μ©μ μ μλ ꡬ쑰체λ ν΄λμ€μ λν΄μλ sort ν¨μλ₯Ό μ¬μ©ν μ μμΌλ©°, μ΄ κ²½μ°μλ λΉκ΅ ν¨μλ₯Ό μ§μ ν΄μ£Όμ΄μΌ ν©λλ€.
sort ν¨μλ μ λ ¬ μκ³ λ¦¬μ¦ μ€ νλμΈ ν΅ μ λ ¬(Quick Sort)μ κΈ°λ°μΌλ‘ λμν©λλ€. ν΅ μ λ ¬μ λΆν μ 볡(divide and conquer) λ°©μμ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ λ ¬νλ μκ³ λ¦¬μ¦μ λλ€. νκ· μ μΌλ‘ O(nlogn)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ©°, λ§€μ° λΉ λ₯Έ μλλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν μ μμ΅λλ€.
V. κ²°λ‘
sort ν¨μλ C++μ STL(Standard Template Library)μμ μ 곡νλ ν¨μλ‘, λ°μ΄ν°λ₯Ό μ λ ¬νκΈ° μν΄ μ¬μ©λ©λλ€. sort ν¨μλ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν μ μμ΅λλ€.
sort ν¨μλ <algorithm>
ν€λ νμΌμ μ μΈλμ΄ μμΌλ©°, μ¬μ©λ²μ λ§€μ° κ°λ¨ν©λλ€. μ λ ¬ν λ°μ΄ν°μ μμ μμΉμ λ μμΉλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό μ λ¬νμ¬ sort ν¨μλ₯Ό νΈμΆνλ©΄ λ©λλ€.
μλ₯Ό λ€μ΄, λ°°μ΄λ‘ μ£Όμ΄μ§ λ°μ΄ν°λ₯Ό μ λ ¬νκ³ μ ν λμλ λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό μμ μμΉλ‘ μ§μ νκ³ , λ°°μ΄μ λ§μ§λ§ μμμ λ€μ μμΉλ₯Ό κ°λ¦¬ν€λ λ°λ³΅μλ₯Ό λ μμΉλ‘ μ§μ ν©λλ€. μ΄λ κ² μ€μ ν νμ sort ν¨μλ₯Ό νΈμΆνλ©΄, μ£Όμ΄μ§ λ°μ΄ν°κ° μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ©λλ€.
μ½λμμλ sort ν¨μλ₯Ό μ¬μ©νμ¬ μ λ ¬λ λ°μ΄ν°λ₯Ό μΆλ ₯νμμ΅λλ€. κ²°κ³Όλ₯Ό νμΈνμ¬ μ£Όμ΄μ§ λ°μ΄ν°κ° μ¬λ°λ₯΄κ² μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμλμ§ νμΈν μ μμ΅λλ€.
sort ν¨μλ κΈ°λ³Έμ μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λλ©°, λ°μ΄ν°μ νμ λ°λΌ μ‘°κΈ λ€λ₯Έ λμμ ν μ μμ΅λλ€. λ¬Έμμ΄μ΄λ μ¬μ©μ μ μλ ꡬ쑰체μ λν΄μλ sort ν¨μλ₯Ό μ¬μ©ν μ μμΌλ©°, λΉκ΅ ν¨μλ₯Ό μ§μ ν΄μ£Όμ΄μΌ ν©λλ€.
sort ν¨μλ ν΅ μ λ ¬(Quick Sort) μκ³ λ¦¬μ¦μ κΈ°λ°μΌλ‘ λμν©λλ€. ν΅ μ λ ¬μ νκ· μ μΌλ‘ O(nlogn)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ©°, λ§€μ° λΉ λ₯Έ μλλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν μ μμ΅λλ€.
C++μ sort ν¨μλ μ λ ¬μ νμν λ€μν κΈ°λ₯μ μ 곡νλ©°, κ°νΈνκ² μ¬μ©ν μ μλ νΈλ¦¬ν ν¨μμ λλ€. λ€μν μλ£νμΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬νκ³ μ ν λμλ λΉκ΅ ν¨μλ₯Ό μ¬μ©νμ¬ μνλ μ λ ¬ μμλ₯Ό μ§μ ν μ μμ΅λλ€. μ΄λ¬ν κΈ°λ₯μ νμ©νμ¬ λ€μν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
λκΈ