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;
}

Class sort

#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;
}

External link

cpp reference

⚠️ **GitHub.com Fallback** ⚠️