CPP_어소_47_과제풀이

CJB_ny·2022년 6월 27일
0

CPP_AROTHO

목록 보기
45/83
post-thumbnail
post-custom-banner

내가 구현한 부분

다시 가변배열 만들고
Sort함수 구현 함

#include <iostream>
#include "Array.h"

void InitArr(TARR* arrAdd)
{
	arrAdd->arrAddr = (int*)malloc(sizeof(int) * 2);
	arrAdd->arrCount = 0;
	arrAdd->arrMaxCount = (sizeof(int) * 2) / sizeof(int);
}

void PushDataInArr(TARR* arrAdd, int inputData)
{
	if (arrAdd->arrCount >= arrAdd->arrMaxCount)
	{
		RelocateArr(arrAdd);
	}

	arrAdd->arrAddr[arrAdd->arrCount++] = inputData;
}

void RelocateArr(TARR* arrAdd)
{
	// 새로운 malloc 힙 메모리 할당
	int* newArrAdd = (int*)malloc(sizeof(int) * arrAdd->arrMaxCount * 2);
	// 새로운 주소에 데이터 이전
	for (int i = 0; i < arrAdd->arrCount; ++i)
	{
		newArrAdd[i] = arrAdd->arrAddr[i];
	}
	// 새로운 주소로 이전 
	arrAdd->arrAddr = newArrAdd;
	// maxCount 2배 증가
	arrAdd->arrMaxCount *= 2;
}

void FreeArr(TARR* arrAdd)
{
	free(arrAdd->arrAddr);
	arrAdd->arrCount = 0;
	arrAdd->arrMaxCount = 0;
}

// 오름차순으로 정렬
void SortArr(TARR* arrAdd)
{
	int temp;

	for (int i = 0; i < arrAdd->arrCount -1; ++i)
	{
		for (int j = 0; j < arrAdd->arrCount - 1; ++j)
		{
			temp = 0;
			if (arrAdd->arrAddr[j] > arrAdd->arrAddr[j + 1])
			{
				temp = arrAdd->arrAddr[j];
				arrAdd->arrAddr[j] = arrAdd->arrAddr[j + 1];
				arrAdd->arrAddr[j + 1] = temp;
			}
		}
	}
}

결과

잘 나온다.


구현해봐야할 알고리즘 ❗❗❗

1. 버블정렬

2. 삽입정렬

3. 선택정렬

4. 합병정렬 (머지 소트)

5. 퀵소트

6. 힙정렬 (-> 완전 이진트리)


랜덤함수 #include <time.h>

컴퓨터에서 난수 개념

rand()

제일간단한 방법 : 무작위로 설정되어있는 "난수" 페이지를 참조하는 방식

srand()

rand()보완

난수에 여러 페이지가 있는데 "시드"값을 통해서

페이지를 변경 시켜준다.

그런데 시드값을 똑같이 주면 동일 페이지에 동일한 랜덤 값 나옴. 그래서

srand인자에다가 srand(time(nullptr)); 이렇게 가능.

랜덤값 범위 활용 (👍)

내가 원하는 수가 만약 0~100 사이의 숫자라고 할 경우

아무리 큰 수라도 100으로 나누었을 경우 "나머지"가 0~99 무조건 고정 아니가???

저는 50~100사이의 숫자를 원하는데요?

5323이든 123이든 50으로 나눈 다음에 +50을 전부다 해주면 50~100사이의 숫자 나옴

123 50으로 나누면 나머지 23에다가 +50 > 73나온다.

버블 정렬 최악의 경우

수가 10 9 8 7 6 5 4 3 2 1 이렇게 있을 경우

오름차순으로 버블 정렬할 경우에 최악임.

데이터 갯수만큼 비교를 계속 해줌.

데이터가 1개 이하인 경우

체크 해주어야 함.

어소 코드 👍

나는 이중 for 문 사용했는데

그냥 while로 감싸서 boolean으로 체크를 해주었다.

profile
https://cjbworld.tistory.com/ <- 이사중
post-custom-banner

0개의 댓글