μμ μ±(stability) νμΈ.
#include <iostream>
#include <cassert>
#include <fstream>
using namespace std;
struct Element
{
int key;
char value;
};
void Print(Element* arr, int size)
{
for (int i = 0; i < size; i++)
cout << arr[i].key << " ";
cout << endl;
for (int i = 0; i < size; i++)
cout << arr[i].value << " ";
cout << endl;
}
int main()
{
// μμ μ± νμΈ(unstable)
{
Element arr[] = { {2, 'a'}, {2, 'b'}, {1, 'c' } };
int size = sizeof(arr) / sizeof(arr[0]);
Print(arr, size);
int min_index;
for(int i = 0; i < (size - 1); i++)
{
min_index = i;
for (int j = (i + 1); j < size; j++)
{
if (arr[j].key < arr[min_index].key)
{
min_index = j;
}
}
swap(arr[i], arr[min_index]);
Print(arr, size);
}
}
return 0;
}
μ€ν κ²°κ³Ό
2 2 1
a b c
1 2 2
c b a
1 2 2
c b a
μ λ ¬μ μμ μ±(stablity)μ΄λΌλ κ°λ μ΄ μμ΅λλ€.
- μ΄ κ°λ
μ
stable
νμ§unstable
νμ§λ‘ ꡬλΆν©λλ€.- μ¦, μμ μ μΈμ§ λΆμμ μ μΈμ§λ‘ ꡬλΆν©λλ€.
μ μ½λμμ 보면 Element
λ°°μ΄μ μ λ ¬ν©λλ€.
μ΄ Γlement
λ₯Ό 보면 λ€μκ³Ό κ°μ΅λλ€.
struct Element
{
int key;
char value;
};
-
Element
μkey
λ μ μμ΄κ³value
λ λ¬Έμμ λλ€.- κ·Έλμ μ λ ¬ν λ
key
λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬ν©λλ€.- κ·Έλ¬λ©΄
swap
μvalue(λ¬Έμ)
λ ν¨κ» λ°λΌκ°λλ€. -> 볡μ¬λ₯Ό νλ λ°λΌκ°λ κ² μ λλ€.
- κ·Έλ¬λ©΄
- κ·Έλμ μ λ ¬ν λ
Element arr[] = { {2, 'a'}, {2, 'b'}, {1, 'c' } };
- 첫 λ²μ§Έ μΈλ±μ€μ μμμ
key
λ2
μ΄κ³value
λ'a'
μ λλ€. - λ λ²μ§Έ μΈλ±μ€μ μμμ
key
λ2
μ΄κ³value
λ'b'
μ λλ€. - μΈ λ²μ§Έ μΈλ±μ€μ μμμ
key
λ1
μ΄κ³value
λ'c'
μ λλ€.
βμ λ ¬μμλ key
κ° μμ μμλλ‘ μ λ ¬λλλ‘ ν κ² μ
λλ€.β
- μ¦,
key
λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬ν©λλ€.
μ¬κΈ°μ μ£Όλͺ©ν΄μΌ ν μ μ β첫 λ²μ§Έ μΈλ±μ€μ λ λ²μ§Έ μΈλ±μ€μ μμμ Valueβμ λλ€.
- λ μΈλ±μ€μ μμμ
key
κ°μ κ°μΌλvalue
κ°μ λ€λ¦ λλ€.
λΉκ΅ λ‘μ§μ 보면 key
κ°μ κ°μ§κ³ λΉκ΅λ₯Ό νμ§λ§ swap
μμλ key
μ value
λ₯Ό λͺ¨λ κ°μ§κ³ μμ§μ
λλ€.
μ€ν κ²°κ³Όλ₯Ό λ³΄κ³ valueμ μμ μ±μ μκ΄ κ΄κ³μ λν΄ μμλ΄ μλ€.
μ€ν κ²°κ³Ό
2 2 1
a b c
1 2 2
c b a
1 2 2
c b a
- μ€ν κ²°κ³Όλ₯Ό 보면 (2 a), (2, b), (1, c)μμ β(1, c), (2, b), (2, a)β μμΌλ‘ μ λ ¬λ κ²μ λ³Ό μ μμ΅λλ€.
- μ²μμλ (2 a), (2, b) μμμμ§λ§ μ λ ¬ νμλ β(2, b), (2, a)β λ‘ μμκ° λ°λμ΄ μ λ ¬λμμ΅λλ€.
- valueκ° λ€λ°λ κ²μ μ μ μμ΅λλ€.
- keyκ° μ λ ¬μ΄ λμμΌλ―λ‘ μ λ ¬μ μ λμλ€κ³ λ³Ό μ μμ΅λλ€.
-
κ·Έλ¬λ βkeyκ° κ°μ κ°μΌ κ²½μ°μλ valueμ μμκ° a, bμμ b, a λ‘ λ°λμμ΅λλ€.β
- βμ¬κΈ°μ stableν κ²κ³Ό unstableν κ²μ μ°¨μ΄μ μ΄ λνλ©λλ€.β
- valueκ° λ€λ°λ κ²μ μ μ μμ΅λλ€.
- μ²μμλ (2 a), (2, b) μμμμ§λ§ μ λ ¬ νμλ β(2, b), (2, a)β λ‘ μμκ° λ°λμ΄ μ λ ¬λμμ΅λλ€.
βν€ κ°μ΄ κ°μλ μ λ ¬μ 벨λ₯ κ°μ΄ μ²μκ³Ό κ°μ΄ μ μ§κ° λλ€λ©΄ κ·Έκ²μ stableνλ€λΌκ³ ν©λλ€, κ·Έμ λ°λλ‘ ν€ κ°μ΄ κ°μΌλ μ²μκ³Ό λ¬λ¦¬ 벨λ₯μ μμκ° λ°λ κ²½μ°μλ unstableνλ€ λΌκ³ ν©λλ€.β
- μ΄κ²λ μ λ ¬ μκ³ λ¦¬μ¦μ λΆλ₯νλ κΈ°μ€ μ€ νλμ λλ€.