본문 바로가기
IT개발/알고리즘

선택정렬 알고리즘

by jusyBear 2020. 7. 29.
반응형

선택 정렬 알고리즘

구현 언어 : 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");
}
반응형