sort 란?

어떤 정보를 다룰 때 정보가 정렬이 안 되어있으면 정보를 분석하기 굉장히 어렵다.

그래서 우리는 어떤 정보가 들어오면 그것을 정렬해서 분석하기 쉽게 만들어야 한다.

따라서 sort()를 이용해서 정렬을 한다.


sort header

C++ sort() 함수를 사용하기 위해서는 algorithm 을 include 해야 한다.

예시

#include <algorithm>

C++ sort 기본 형태

sort 함수의 기본 형태는 다음과 같다.

  1. sort(start,end)를 이용하면 [start,end) 범위의 인자를 오름차순(기본값,default)으로 정렬해 준다.

  2. sort(start,end,compare)를 이용하면 사용자가 정한 함수(compare)를 기준으로 정렬을 하게 된다.

  3. sort(start,end,grearter<자료형>())를 이용하면 [start,end) 범위의 인자를 내림차순으로 정렬해 준다.


sort 기본 형태 예제 (오름차순 정렬)

오름차순 정렬 : sort(start,end)를 이용하면 [start,end) 범위의 인자를 오름차순(기본값,default)으로 정렬해 준다.

예시

#include <iostream>

#include <algorithm>

using namespace std;

//배열 초기화
int iv[10] = {1,3,4,2,6,7,2,10,12,5};
double dv[10] = {10.1,1.0,0.9,5.5,4.99,10.0,10.001,3.2,10,1.9};
char cv[10] = {'b','a','c','j','i','d','h','e','c','z'};

int main()
{
        cout<<"int형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl;

        sort(iv,iv+10);		//sort(iv 배열의 시작점,iv 배열의 시작점 + 10)

        cout<<"int형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl<<endl;

	
	cout<<"double형 배열 정렬하기 전 상태:\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl;

        sort(dv,dv+10);		//sort(dv 배열의 시작점,dv 배열의 시작점 + 10)

	cout<<"double형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl<<<endl;

        
	cout<<"char형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        sort(cv,cv+10);		//sort(cv 배열의 시작점,cv 배열의 시작점 + 10)

        cout<<"char형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        return 0;
}

실행 결과

int형 배열 정렬하기 전 상태 :	1 3 4 2 6 7 2 10 12 5 
int형 배열 정렬 후 상태 :	1 2 2 3 4 5 6 7 10 12
 
double형 배열 정렬하기 전 상태:	10.1 1 0.9 5.5 4.99 10 10.001 3.2 10 1.9 
double형 배열 정렬 후 상태 :	0.9 1 1.9 3.2 4.99 5.5 10 10 10.001 10.1 

char형 배열 정렬하기 전 상태 :	b a c j i d h e c z 
char형 배열 정렬 후 상태 :	a b c c d e h i j z 

실행 결과에서 알 수 있듯이 int, double 형태는 숫자의 오름차순으로 정렬되고 char 형태는 알파벳 순서의 오름차순으로 정렬된다.


sort 기본 형태 예제 (사용자 정의 정렬)

C++ sort compare를 사용한 예제이다.

사용자 정의 정렬 : sort(start,end,compare)를 이용하면 사용자가 정한 함수(compare)를 기준으로 정렬을 하게 된다.

compare 함수에서 const(상수)를 사용하는 이유는 compare 함수를 이용하면서 값을 바꾸지 않고 값을 참조만 하겠다는 것을 명시적으로 나타내기 위함이다.

예시

#include <iostream>

#include <algorithm>

using namespace std;

//int 정렬 값을 내림차순으로 만드는 함수(사용자가 만든 compare 함수)
bool icompare(const int &a, const int &b)
{
        if(a > b)
                return true;
        else
                return false;
}

//double 정렬 값을 내림차순으로 만드는 함수(사용자가 만든 compare 함수)
bool dcompare(const double &a, const double &b)
{
        if(a > b)
                return true;
        else
                return false;
}

//char 정렬 값을 내림차순으로 만드는 함수(사용자가 만든 compare 함수)
bool ccompare(const char &a, const char &b)
{
        if(a > b)
                return true;
        else
                return false;
}

//배열 초기화
int iv[10] = {1,3,4,2,6,7,2,10,12,5};
double dv[10] = {10.1,1.0,0.9,5.5,4.99,10.0,10.001,3.2,10,1.9};
char cv[10] = {'b','a','c','j','i','d','h','e','c','z'};

int main()
{
        cout<<"int형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl;

	//sort(iv 배열의 시작점,iv 배열의 시작점 + 10,사용자 지정 함수(icompare))
        sort(iv,iv+10,icompare);

        cout<<"int형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl<<endl;


        cout<<"double형 배열 정렬하기 전 상태:\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl;

	//sort(dv 배열의 시작점,dv 배열의 시작점 + 10,사용자 지정 함수(dcompare))
        sort(dv,dv+10,dcompare);

        cout<<"double형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl<<endl;


        cout<<"char형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

	//sort(cv 배열의 시작점,cv 배열의 시작점 + 10,사용자 지정 함수(ccompare))
        sort(cv,cv+10,ccompare);

        cout<<"char형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        return 0;
}

실행 결과

int형 배열 정렬하기 전 상태 :	1 3 4 2 6 7 2 10 12 5 
int형 배열 정렬 후 상태 :	12 10 7 6 5 4 3 2 2 1 

double형 배열 정렬하기 전 상태:	10.1 1 0.9 5.5 4.99 10 10.001 3.2 10 1.9 
double형 배열 정렬 후 상태 :	10.1 10.001 10 10 5.5 4.99 3.2 1.9 1 0.9 

char형 배열 정렬하기 전 상태 :	b a c j i d h e c z 
char형 배열 정렬 후 상태 :	z j i h e d c c b a 

실행 결과에서 알 수 있듯이 사용자가 임의로 만든 compare 함수가 내림차순 함수이기 때문에 내림차순 기준에 맞춰서 int, double 형태는 숫자의 내림차순으로 정렬되고 char 형태는 알파벳 순서의 내림차순으로 정렬된다.


sort 기본 형태 예제 (내림차순 정렬)

C++ sort greater를 사용한 예제이다.

내림차순 정렬 : sort(start,end,grearter<자료형>())를 이용하면 [start,end) 범위의 인자를 내림차순으로 정렬해 준다.

예시

#include <iostream>

#include <algorithm>

using namespace std;

//배열 초기화
int iv[10] = {1,3,4,2,6,7,2,10,12,5};
double dv[10] = {10.1,1.0,0.9,5.5,4.99,10.0,10.001,3.2,10,1.9};
char cv[10] = {'b','a','c','j','i','d','h','e','c','z'};

int main()
{
        cout<<"int형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl;

        //sort(iv 배열의 시작점,iv 배열의 시작점 + 10,greater 사용(내림차순 정렬))
        sort(iv,iv+10,greater<int>());

        cout<<"int형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<iv[i]<<" ";
        cout<<endl<<endl;


        cout<<"double형 배열 정렬하기 전 상태:\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl;

        //sort(dv 배열의 시작점,dv 배열의 시작점 + 10,greater 사용(내림차순 정렬))
        sort(dv,dv+10,greater<double>());

        cout<<"double형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<dv[i]<<" ";
        cout<<endl<<endl;


        cout<<"char형 배열 정렬하기 전 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        //sort(cv 배열의 시작점,cv 배열의 시작점 + 10,greater 사용 (내림차순 정렬))
        sort(cv,cv+10,greater<char>());

        cout<<"char형 배열 정렬 후 상태 :\t";
        for(int i = 0;i < 10;i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        return 0;
}

실행 결과

int형 배열 정렬하기 전 상태 :	1 3 4 2 6 7 2 10 12 5 
int형 배열 정렬 후 상태 :	12 10 7 6 5 4 3 2 2 1 

double형 배열 정렬하기 전 상태:	10.1 1 0.9 5.5 4.99 10 10.001 3.2 10 1.9 
double형 배열 정렬 후 상태 :	10.1 10.001 10 10 5.5 4.99 3.2 1.9 1 0.9 

char형 배열 정렬하기 전 상태 :	b a c j i d h e c z 
char형 배열 정렬 후 상태 :	z j i h e d c c b a 

실행 결과에서 알 수 있듯이 grearter를 사용하면 내림차순으로 정렬된다. 따라서 int, double 형태는 숫자의 내림차순으로 정렬되고 char 형태는 알파벳 순서의 내림차순으로 정렬된다.


vector sort (compare, greater)

C++ vector class sort 예제이다.

예시

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

//double 정렬 값을 내림차순으로 만드는 함수(사용자가 만든 compare 함수)
bool compare(const double &a,const double &b)
{
        if(a > b)
                return true;
        else
                return false;
}


//vector 초기화
vector <int> iv = {1,3,4,2,6,7,2,10,12,5};

vector <double> dv = {10.1,1.0,0.9,5.5,4.99,10.0,10.001,3.2,10,1.9};

vector <char> cv = {'b','a','c','j','i','d','h','e','c','z'};

int main()
{
        cout<<"int형 vector 정렬하기 전 상태 : \n";
        for(int i = 0;i < iv.size();i++)
                cout<<iv[i]<<" ";
        cout<<endl<<endl;

	//sort(vector iv의 시작점,vector iv의 끝)
        sort(iv.begin(),iv.end());

        cout<<"int형 vector 정렬 후 상태(1번 형태 sort) : \n";
        for(int i = 0;i < iv.size();i++)
                cout<<iv[i]<<" ";
        cout<<endl<<endl;

        
	cout<<"double형 vector 정렬하기 전 상태 : \n";
        for(int i = 0;i < dv.size();i++)
                cout<<dv[i]<<" ";
        cout<<endl<<endl;

	//sort(vector dv의 시작점,vector dv의 끝,사용자 지정 함수(compare))
        sort(dv.begin(),dv.end(),compare);

        cout<<"double형 vector 정렬 후 상태(2번 형태 sort (compare)) : \n";
        for(int i = 0;i < dv.size();i++)
                cout<<dv[i]<<" ";
        cout<<endl<<endl;

        
	cout<<"char형 vector 정렬하기 전 상태 : \n";
        for(int i = 0;i < cv.size();i++)
                cout<<cv[i]<<" ";
        cout<<endl<<endl;

	//sort(vector cv의 시작점,vector cv의 끝,greater 사용 (내림차순 정렬))
        sort(cv.begin(),cv.end(),greater<char>());

	cout<<"char형 vector 정렬 후 상태(3번 형태 sort (greater)) : \n";
        for(int i = 0;i < cv.size();i++)
                cout<<cv[i]<<" ";
        cout<<endl;

        return 0;
}

실행 결과

int형 vector 정렬하기 전 상태 : 
1 3 4 2 6 7 2 10 12 5 

int형 vector 정렬 후 상태(1번 형태 sort) : 
1 2 2 3 4 5 6 7 10 12 

double형 vector 정렬하기 전 상태 : 
10.1 1 0.9 5.5 4.99 10 10.001 3.2 10 1.9 

double형 vector 정렬 후 상태(2번 형태 sort (compare)) : 
10.1 10.001 10 10 5.5 4.99 3.2 1.9 1 0.9 

char형 vector 정렬하기 전 상태 : 
b a c j i d h e c z 

char형 vector 정렬 후 상태(3번 형태 sort (greater)) : 
z j i h e d c c b a 

실행 결과에서 알 수 있듯이 vector sort는 vector의 시작점 (vector.begin()), vector의 끝(vector.end())을 사용하여 sort 함수를 사용하면 된다.

감사합니다.


홈으로 가기 더 많은 C++ post 보기 post 목록 보기