끄적끄적 개발공부

#배열로 로또번호 뽑기(3) feat.bubblesort

HYuk 2021. 4. 10. 19:53
728x90

# 배열로 로또번호 뽑기(2) (tistory.com)

 

# 배열로 로또번호 뽑기(2)

# 배열로 로또번호 뽑기 (1) (tistory.com) # 배열로 로또번호 뽑기 (1) 난수를 써서 로또번호 뽑기를 하려고한다. #include #include using namespace std; void main() { srand(unsigned(time(NULL))); int iNum..

hyukee.tistory.com

중복되지 않는 난수 뽑는거까지 완료했다.

이제 뽑은 6개의 난수를 오름차순으로 정렬해보려고 한다.

오름차순 정렬하는데에는

가장 기초적인 방법으로 Bubblesort가 있다.

 

Bubble sort는

배열에서

한 숫자와 그 옆에 있는 숫자를 비교하여 큰 수를 계속적으로 뒤로 보내는 방법이다.

 

for문을 이용하여 반복횟수를 정할 수 있는데,

4,3,2,1가 있으면

1번째와 2번째를 비교하여

3,4,2,1

2번째와 3번째를 비교하여

3,2,4,1

3번째와 4번째를 비교하여

3,2,1,4

이때 가장 큰 숫자는 맨뒤로 와있기 때문에 (1,2), (2,3) 만 비교해서 나열해주면 된다.

그다음은 (1,2) 만 비교해서 나열해주면된다.

 

따라서 아래와 같이 Bubblesort를 만들 수 있다.

void Bubblesort(int iNum[],int size) // 배열, 오름차순0~size만큼
{
	int iTemp = 0;
	for (int i = 0; i < size; ++i)
	{
		for (int j = 0; j<size-i ; ++j)
		{
			if (iNum[j] > iNum[j+1])
			{
				iTemp = iNum[j];
				iNum[j] = iNum[j+1];
				iNum[j+1] = iTemp;
			}
		}
	}
}

 

 

로또 번호(1~45)를 랜덤으로 뽑아서 오름차순으로 정렬하는 최종함수는 이렇게 된다.

#include <iostream>
#include <time.h>

using namespace std;

void Pick(int iNum[],int size,int picknum); // 배열,배열크기,뽑을숫자
void Bubblesort(int iNum[], int size); // 배열,오름차순 할 갯수 (0부터)

void main()
{
	srand(unsigned(time(NULL)));
	int iNum[45] = {};
	for (int i = 0; i < 45; ++i)
	{
		iNum[i] = i + 1; // 배열에 1~45 초기화
	}
	Pick(iNum, sizeof(iNum) / sizeof(int), 6); // 랜덤뽑기 함수
	Bubblesort(iNum, 6); // 오름차순 정렬 함수
	cout << "로또번호 뽑기: ";
	for (int i = 0; i < 6; ++i)
	{
		cout << iNum[i] << '\t';
	}
	cout << endl;
}

void Pick(int iNum[],int size,int picknum) // 랜덤 숫자 뽑기
{
	int iRd1 = 0, iTemp = 0;

	for (int i = 0; i < picknum; ++i) // 난수하나(0~44)의 값을 뽑고, iNum[0:5] 의 배열값을 iNum[난수]와 바꿔줌
								// 그렇게 되면 iNum[0]에 iNum[난수]의 값이 들어가고, iNum[난수]에는 iNum[0]의 값이 들어가있음
	{
		iRd1 = rand() % size; // 난수 추출

		iTemp = iNum[i];
		iNum[i] = iNum[iRd1];
		iNum[iRd1] = iTemp;		//두 배열의 위치를 바꾸어 주는 것
	}

}

void Bubblesort(int iNum[],int size)
{
	int iTemp = 0;
	for (int i = 0; i < size; ++i)
	{
		for (int j = 0; j<size-i ; ++j)
		{
			if (iNum[j] > iNum[j+1])
			{
				iTemp = iNum[j];
				iNum[j] = iNum[j+1];
				iNum[j+1] = iTemp;
			}
		}
	}
}
728x90