Sort - dongyeoplee87/DYLee GitHub Wiki
- template void sort (RandomAccessIterator first, RandomAccessIterator last);
- template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
comp를 지정하지 않으면 기본 오름차순 (ex. 3 4 1 2 -> 1 2 3 4)
sort(a,b,comp) 에서 comp가 true라면 a가 b보다 앞에 있음
따라서 comp = a<b 라면 오름차순, 반대라면 내림차순이 됨
// sort algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::sort
#include <vector> // std::vector
bool myfunction (int i,int j) { return (i<j); }
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;
int main () {
int myints[] = {32,71,12,45,26,80,53,33};
std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33
std::vector<int> myvector (myints, myints+8, [](int a, int b){return a>b;}); // 람다함수 내림차순
// using default comparison (operator <):
std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33
// using function as comp
std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
// using object as comp
std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80)
// print out content:
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}#include <iostream>
#include <algorithm> // std::sort
#include <numeric>
using namespace std;
int N;//정수
class Fraction {
public :
Fraction(int num, int denomi) : numerator(num), denominator(denomi) {}
Fraction() {}
void Print() {
int val_gdc = __gcd((int)this->numerator, (int)this->denominator);
printf("%d/%d\n", this->numerator/val_gdc, this->denominator/val_gdc);
}
double ShowVal() {
return ((double)this->numerator / (double)this->denominator);
}
// private :
int numerator; // 분자
int denominator; // 분모
};
void InputData(){
cin >> N;
}
int main() {
InputData(); //입력
int index = 0;
int maxIndex = 2;
for(int i=2;i<=N;i++) {
maxIndex += (i-1);
}
Fraction data[maxIndex];
data[0] = Fraction(0,1);
data[1] = Fraction(1,1);
index += 2;
for(int i=2;i<=N;i++) {
for(int j=1;j<i;j++) {
data[index] = Fraction(j,i);
index++;
}
}
sort(data, &data[index], [](Fraction a, Fraction b) {
int multi = a.denominator * b.denominator;
return ((a.numerator * multi / a.denominator) < (b.numerator * multi / b.denominator));
});
double beforeValue = -1;
for(int i=0; i<index; i++) {
if (beforeValue != data[i].ShowVal()) {
data[i].Print();
beforeValue = data[i].ShowVal();
}
}
return 0;
}