반응형
선택 정렬 알고리즘
구현 언어 : c++(클래스를 사용해서 구현)
접근법:
1. 일단 선택정렬 알고리즘이 어떻게 돌아가는지 찾아봤다.
2. 그 다음은 필요한 함수와 변수를 만듬
- 사용함수 : swap, 기능을 담당할 sortFunc, 출력을 담당할 sortPrint
- 배열이 필요해서 배열 int number 선언 그 후에 배열 사이즈를 정하는데 나중에 바꾸기 쉬우려고 define으로 정의
구현중 문제점 :
1. 코딩적 능력 부족, 포인터 사용을 잘못해서 찾아봄(배열과 포인터)
2. 선택정렬 알고리즘은 제일 작은 수를 찾아, 앞으로 보내는데 제일 작은 수를 찾을때마다 찾은 시점에서 스왑을 실행
- for문 사용을 잘못함, 해결법은 이중 for문 안에서 스왑을 하는게 아니라 첫 for문이 끝날때마다 스왑을 실행
3. 2의 문제를 해결하니, 스왑을 할 필요가 없을 때도 스왑을 시행,
- 해결법 : if문 조건을 걸어서 자신보다 작은 수가 없을 때는 스왑을 안하도록 만들었다.
구현소스
#include<iostream>
#include<time.h>
using namespace std;
#define MAX 7
class sort
{
public:
sort();
void swap(int *number, int x, int y);
void sortFunc(int *number);
void sortPrint(int *number);
private:
int number[MAX];
int select = 0;
};
sort::sort()
{
}
void sort::swap(int *number, int x, int y) {
int temp;
temp = number[x];
number[x] = number[y];
number[y] = temp;
}
void sort::sortFunc(int *number) {
select = 0;
int min;
for (int i = 0; i < MAX; i++) {
min = number[i];
select = 0;
for (int j = i + 1; j < MAX; j++) {
if (min > number[j]) {
min = number[j];
select = j;
}
}
if (select != 0) swap(number, i, select);
sortPrint(number);
}
}
void sort::sortPrint(int *number)
{
cout << endl;
cout << endl;
for (int i = 0; i < MAX; i++)
{
cout << number[i] << " ";
}
}
int main(void)
{
int number[MAX];
srand((unsigned)time(NULL));
for (int i = 0; i < MAX; i++)
{
number[i] = rand() % 50 + 1;
}
sort s = sort();
s.sortPrint(number);
s.sortFunc(number);
system("pause");
}
반응형