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

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@codingman·
0.000 HBD
[C++ 언어-기초실습-6] 간단히 오름 or 내림 차순 정렬하기?
# [C++ 언어-기초실습-6]  간단히 오름 or 내림 차순 정렬하기?
---
- 다운 사이트 : https://sourceforge.net/projects/orwelldevcpp/
- 웹컴파일러 : https://www.tutorialspoint.com/compile_c_online.php
---
정렬 알고리즘을 찾아서 오름 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](https://cdn.steemitimages.com/DQmZKDQjWAB6ESEXDaGFuZ8QvHipVpUef4DC2bJHoZJaTMy/a1.jpg)


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

---

#####  <sub> **Sponsored ( Powered by [dclick](https://www.dclick.io) )** </sub>
[![dclick-imagead](https://s3.ap-northeast-2.amazonaws.com/dclick/image/jacobyu/1560603830043.png)](https://api.dclick.io/v1/c?x=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiY29kaW5nbWFuIiwicyI6ImMtNi1vci0tMTU2MTA3NzY5MzcyNiIsImEiOlsiaS0zNzYiXSwidXJsIjoiaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5hcHAuc20uc3BlYWtpbmdtYXN0ZXIiLCJpYXQiOjE1NjEwNzc2OTMsImV4cCI6MTg3NjQzNzY5M30.ufNHN_0kn7s41nnd_9cNlDw-5YFy97UTv4vorP3eC5s)
👍 , , , , , , , , , , , , , , , , , , , , , , , , ,