[C++ 언어-기초실습-6] 간단히 오름 or 내림 차순 정렬하기?

in #kr-dev6 years ago (edited)

[C++ 언어-기초실습-6] 간단히 오름 or 내림 차순 정렬하기?



정렬 알고리즘을 찾아서 오름 or 내림 정렬 코딩을 하지 말고 우선 간단한 방식으로 올름 or 내림 차순 정렬을 실습 해보도록 하죠.

1. 정렬 알고리즘


특정 배열을 값들을 오름 or 내림 차순으로 정렬을 수행을 한다는 전재 하에서 한번 코딩을 만들어 볼까요.

for(int i=0;i<N;i++){
    arr[i];
}

이렇게 하면 순차적으로 배열 arr[i]을 불러 올 수 있습니다. 정렬을 하기 위해서 배열에서 두개의 위치를 비교하여 서로의 위치를 교환하여 오름 or 내림 차순을 만들 수 있습니다.

그러면, 두개의 위치를 비교하기 위해서는 2중 for문을 사용해야 합니다.

for(int i=0;i<N-1;i++){
  for(int j=i+1;j<N;j++){
     if(arr[i]>arr[j]){ 교환; }
  }
}

이렇게 두 위치를 비교하여 정렬을 수행합니다.

여기서, 어떤 조건 일때 교환을 할거냐에 따라서 오름 차순이 되거나 내림 차순이 됩니다.

[오름차순] : 앞에 값이 뒤에 값보다 크면 교환 하여 앞에 값을 뒤로 이동 시킵니다.

 if(arr[i]>arr[j]){ }

[내림차순] : 앞에 값이 뒤에 값보다 작으면 교환 하여 앞에 값을 뒤로 이동 시킵니다.

 if(arr[i]<arr[j]){ }

두 위치에 있는 값을 비교하여 크냐 or 작냐에 따라 오름 or 내림 차순이 됩니다.

교환은 다음과 같습니다.

오름 차순으로 하면,

 if(arr[i]>arr[j]){
    tmep=arr[i];
    arr[j]=arr[j];
    arr[j]=tmep;
 }

이렇게 2개의 값을 교환하기 위해서는 어떤 한개의 값을 임시 저장 할 수 있는 변수를 하나 사용하면 됩니다. 첫번째 값을 임시저장 공간에 저장해 놓고 첫번째 위치에 두번째 값을 저장하고 두번째 위치는 방금 저장한 첫번째 값을 두번째 위치에 저장하면 됩니다. 위 코딩은 오름 차순 정렬이고 내림 차순이면 if문의 비교 방향을 반대로 하면 됩니다.

2. 코딩


그러면 실제로 오름 or 내림 차순으로 정렬 되는지 테스트 해 볼까요.

  • 조건 : 오름 차순 정렬을 수행하시오.

[전체소스]

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    
    int arr[10]={1,30,22,5,7,29,100,33,99,77};
    const int N=10;
    int temp=0;

    cout<<"원본 데이터 : ";
    for(int i=0;i<N;i++){
        cout<<arr[i];       
        if(i!=N-1) cout<<" ";
    }
    cout<<endl;
    
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            if(arr[i]>arr[j]){
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;                
            }
        }
    }
    
    cout<<"오름차순 정렬 : ";
    for(int i=0;i<N;i++){
        cout<<arr[i];       
        if(i!=N-1) cout<<" ";
    }
    cout<<endl;
    
    return 0;
}

위 코딩에서 정렬 알고리즘은 이게 전부 입니다.

    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            if(arr[i]>arr[j]){
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;                
            }
        }
    }

여기서 if문에서 오름 or 내림차순이 결정 됩니다.

if(arr[i]>arr[j]){ } //오름차순 정렬

or

if(arr[i]<arr[j]){ } //내림차순 정렬

실습은 오름차순입니다. 내림차순으로 위와 같이 변경하여 실행 시켜 보세요.

[결과]
a1.jpg

마무리


과거 정보처리기사 자격증을 취급 할 때 데이터를 정렬을 간단히 2중 for문을 이용하여 코딩 했던 기억이 잠깐 떠오르네요. 지금은 정보처리기사 시험 제도가 바뀌었지만 예전에는 간단히 데이터를 정렬 할 때 위 코딩을 많이 사용합니다. 사실 정렬 알고리즘의 종류는 많아서 위 방법으로 해도 되고 다른 정렬 알고리즘을 사용해도 됩니다. 하지만 간단히 배열의 개념을 생각하고 순차적으로 비교해 봐여 정렬을 시킬 때 가볍게 로직을 떠올 리기에 위와 같은 코딩이 좋습니다. 암튼 초기에는 단순한 코딩이 좋기 때문에 시각복잡도 같은 건 생각하지 말고 편하게 코딩을 해 보세요.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Thank you