끄적끄적 개발공부
#배열로 로또번호 뽑기(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