[C++ 언어-기초실습-6] 간단히 오름 or 내림 차순 정렬하기?
kr-dev·@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]){ } //내림차순 정렬 ``` 실습은 오름차순입니다. 내림차순으로 위와 같이 변경하여 실행 시켜 보세요. **[결과]**  ## 마무리 --- 과거 정보처리기사 자격증을 취급 할 때 데이터를 정렬을 간단히 2중 for문을 이용하여 코딩 했던 기억이 잠깐 떠오르네요. 지금은 정보처리기사 시험 제도가 바뀌었지만 예전에는 간단히 데이터를 정렬 할 때 위 코딩을 많이 사용합니다. 사실 정렬 알고리즘의 종류는 많아서 위 방법으로 해도 되고 다른 정렬 알고리즘을 사용해도 됩니다. 하지만 간단히 배열의 개념을 생각하고 순차적으로 비교해 봐여 정렬을 시킬 때 가볍게 로직을 떠올 리기에 위와 같은 코딩이 좋습니다. 암튼 초기에는 단순한 코딩이 좋기 때문에 시각복잡도 같은 건 생각하지 말고 편하게 코딩을 해 보세요. --- ##### <sub> **Sponsored ( Powered by [dclick](https://www.dclick.io) )** </sub> [](https://api.dclick.io/v1/c?x=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiY29kaW5nbWFuIiwicyI6ImMtNi1vci0tMTU2MTA3NzY5MzcyNiIsImEiOlsiaS0zNzYiXSwidXJsIjoiaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5hcHAuc20uc3BlYWtpbmdtYXN0ZXIiLCJpYXQiOjE1NjEwNzc2OTMsImV4cCI6MTg3NjQzNzY5M30.ufNHN_0kn7s41nnd_9cNlDw-5YFy97UTv4vorP3eC5s)
👍 codingman, talken, anpigon, steemory, pigoncchio, glory7, bramd, stylegold, roadofrich, dorian-lee, busy.pay, jhy2246, good21, neojew, bullionstackers, gasigogi, sindong, marsswim, virus707, matildah, sintai, skan, gghite, urobotics, dj-on-steem,