[C++]정렬 알고리즘 프로그래밍-②정렬할 준비하기

 

이론으로만 배우던 정렬 알고리즘을 직접 프로그래밍하며 익혀보는 시간입니다.

이름하야 열정넘치는 정열아닌 정렬 프로젝트!!

Bubble버블, Selection선택, Insertion삽입, Merge머지, Heap, Quick소트를 다뤄보도록 하겠습니다.

 

 

[C++]정렬 알고리즘 프로그래밍-①코딩 준비하기

이전 시간에 코딩할 준비를 마쳤습니다.  이번 시간에는 본격적인 프로그래밍에 앞서 정렬 알고리즘들을 하나의 프로젝트로 만들기 위해 부가적으로 필요한 메소드들을 만들보겠습니다.

 


 

정렬할 준비!

 

정렬 알고리즘들을 구현하여 하나의 프로젝트로 만들기 위해 본격적인 프로그래밍에 앞서

부가적으로 필요한 메소드들을 만들보겠습니다.

 

 

어떤 메소드들이 있는지 sort_class.h 헤더파일을 통해 살펴보겠습니다.

 * 솔루션 탐색기의 "헤더파일" 오른쪽 클릭 후 추가 → 새항목 → .h파일 을 선택하여 헤더파일을 생성합니다.

 

<sort_class.h>

 

 

Sort라는 클래스에

정렬할 숫자를 무작위로 가져오는 GetRandomData(), 

숫자를 출력해내는 PrintArray(),

정렬이 제대로 되었는지 확인하기 위한 CheckResult() 함수를 구현하도록 하겠습니다.

 

변수 n은 정렬할 수의 개수를 나타내고, *x는 정렬할 수를 담은 배열로 사용할 예정입니다.

 

 

 

 

이제 각 메소드에 해당하는 cpp 파일을 생성하겠습니다.

* 솔루션 탐색기의 "소스 파일" 오른쪽 클릭 후 추가 → 새항목  .cpp 파일 선택하여 소스파일을 생성합니다.

 

<get_random_data.cpp>

 

 

- 정렬할 수를 직접 하드코딩할 수도 있겠지만 랜덤 생성하기 위해 GetRandomData 함수를 사용할 것입니다.

- 개수가 변해도 개수에 맞게 무작위로 가져올 것이고,  이때  정렬할 개수는 파라미터로 지정할 수 있습니다.

- 시간을 Seed로 무작위로 찍어내도록 srand()와 time(0)을 이용합니다.

- 대신 정렬할 숫자의 범위를 제한하기 위해 (너무 커지는 것을 방지하기 위해) % 연산을 이용합니다.

 

 

<check_result.cpp>

 

- 많은 양의 숫자가 출력되면 정렬 여부를 한 눈에 알기 어려우므로 checkResult 함수를 사용합니다.

- x[i]가 x[i-1]보다 커야 제대로 정렬된 것입니다(물론 오름차순으로!)

- 이에 따라 x[i-1]이 x[i]보다 크다면 Error를 출력하고, 그렇지 않다면 "Good!"을 출력하여 정렬이 제대로 되었는지 확인하겠습니다.

 

 

<print_array.cpp>

 

- 눈으로 확인하기 위해 숫자를 콘솔창에 출력하는 함수입니다.

- i가 0부터 n-1까지 1씩 커지면서 x[i]를 찍어냅니다.

- 한 라인에 10개씩 찍어주기 위해 i+1을 10으로 나눈 나머지가 0임을 확인하여 다음 라인에 출력합니다.

  

 

<main.cpp>

 

 - Sort 프로젝트의 메인 함수입니다. Sort 클래스의 객체 a를 생성하고 a의 메서드를 호출하는 역할입니다.

- GetRandomData(20)로 20개의 숫자를 무작위로 생성한 후 PrintArray()로 20개의 숫자를 출력합니다.

- 결과는 아직 정렬은 하지 않았으므로 CheckResult를 하면 Error가 나게됩니다. 

 

결과 

20개의 난수를 생성하여 출력하기. 정렬하기 전이므로 Error를 호출

 


 

다음 포스팅에서는 가장 쉽!게! 정렬할 수 있는 Bubble Sort에 대해 알아보겠습니다.

정렬하기 참 쉽죠잉~!

반응형
그리드형

댓글

❤️김세인트가 사랑으로 키웁니다❤️