이전에 만들었던 숫자입력에서 오름차순과 내림차순 정렬에 대해 공부해보려고 한다.
일단 오름차순 내림차순은 정렬중에 제일 쉬운 알고리즘을 갖고있을거 같은데 나의 짧은 수학지식으로 생각을 해보도록 하겠다.
내림차순을 먼저 보겠다. 아마 내림차순은 부등호만 반대로하면 되지않을까 싶다.
- number[x]는 number[y]와 비교해서 더 큰지 체크한다.
- 크다면 두개를 교환하고 다시 처음부터 재생.
- 크지 않다면 y에 1을 더해준다. y가 범위를 벗어나면 2번으로
- number[x]보다 큰 수가 없다면 x에 1을 더해준다 그 후 1번을 재생
- 반복해주다 x가 범위를 벗어나면 종료
이게 내가 생각해낸 간단한 알고리즘이다. 반복해주고 범위설정을 하는방법은 알고있으니 넘어가고 내가 습득해야 할 지식은 조건문, 그리고 두개를 교환하는 방법이다. 한번 찾아보도록 하겠다.
조건문은 언리얼 branch와 동일한데.
if(조건)
{
(조건에 맞으면) x +1
}
else(위의 조건에 맞지 않을 때)
{
x - 1
}
같은 식으로 사용할 수 있다.
교환하는 방법을 알아냈다. 수를 저장하는 변수 temp를 만들어 섞어주는것이다. 그냥 두 변수를 바꿔주는 방법은 찾지 못했다.
temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
이렇게 하면 두 수를 바꿀 수 있다!
arr[x]가 arr[y]보다 수가 작다면 두 수를 바꾼다.
이제 arr[x]가 3이고 arr[y]가 5라면 두개가 교환되어 arr[x]가 5, arr[y]가 3이 될 것이다
그렇다면 우리는 수가 많으니까 x가 1~size까지 올라가면서 y(1~size)랑 비교하면 되니 for문을 for문이 감싸고있는걸 만들면 된다.
이렇게 만들었다.
그리고 마지막에 우리가 정리한 걸 말해주는 저번시간에 했던 배열 나열하는 코드를 써주면
이렇게 된다.
전체 함수는 이렇게 생겼고, 한번 실행해보겠다
아주 잘된다(여기서는 오름차순을 입력함)
끝!
수정사항
이였지만 다시 돌아와서 수정을 해야겠다.
1. 일단 y는 x보다 작거나 같을 필요가 없기 때문에
이렇게 y = x+1로 고쳐줬다
2. 정렬을 한 후에 메세지 출력할 때 배열을 불러오는건 똑같기 때문에 앞의 if문에서는 "오름차순 정렬"과 "내림차순 정렬" 만 하고 if문이 끝난 후에 배열을 출력하게 했다.
조금 더 깔끔해졌다.
(2번째)끝!
'C++' 카테고리의 다른 글
C++[아이템을 다른 헤더파일에서 가져와서 사용하기] (0) | 2025.01.14 |
---|---|
C++[텍스트 RPG에서 상점 만들기(2. 구매, 판매)] (0) | 2025.01.13 |
C++ [텍스트 RPG에서 상점 만들기(1. 플로우차트, 상점 입장)] (0) | 2025.01.10 |
C++[클래스를 이용해 동물소리 출력] (0) | 2024.12.26 |
C++[숫자 5개를 받아 합계를 내고 평균 구하기] (0) | 2024.12.24 |