상세 컨텐츠

본문 제목

1-3 난수 생성 후 오름차순 정렬

과제

by 근성 2021. 7. 8. 09:18

본문

 입력받은 크기(1~10)의 제곱 크기의 2차원 배열을 만들고, 안에 수를 난수로(1~99) 채웁니다.
그 후에 각 배열의 값을 오름차순으로 정렬시키는 문제입니다.

 

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

using namespace std;

int main()
{
	int size;
	int save;
	cout<<"Array Size(0<N<11) : ";
	cin >> size;

	int** arr;
	int* sortarr;
	arr = (int**)malloc(sizeof(int*) * size);
	for (int i = 0; i < size; i++)
	{
		*(arr + i) = (int*)malloc(sizeof(int*) * size);
	}
	srand((unsigned int)time(NULL));
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			arr[i][j] = rand() % 99 + 1;
			for (int h = 0; h < j; h++)
			{
				if (arr[i][j] == arr[i][h]) {
					j--;
					break;
				}
			}

		}

	}

	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout<<arr[i][j]<<"\t";
		}
		printf("\n");
	}
	cout << "\n" << endl;
	sortarr = (int*)malloc(sizeof(int*) * (size * size));

	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			sortarr[i * size + j] = arr[i][j];
		}
	}



	for (int i = 0; i < size*size-1; i++)
	{
		for (int j = 0; j < size*size-1 - i; j++)
		{
			if (sortarr[j] > sortarr[j + 1])
			{
				save = sortarr[j];
				sortarr[j] = sortarr[j + 1];
				sortarr[j + 1] = save;
			}
		}
	}

	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			arr[i][j] = sortarr[i * size + j];
		}
	}

	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size; j++)
		{
			cout<<arr[i][j]<<"\t";
		}
		cout<<"\n";
	}

	for (int i = 0; i << size; i++)
	{
		free(*(arr + i));
	}

	free(arr);
	free(sortarr);
	return 0;
}

제가 이 과제를 할 때는 c++ 방식으로 메모리 할당 및 해제를 배우지 않을 상태여서

new delete가 아닌 malloc과 free를 사용한 점 양해 부탁드립니다.

 

처음에는 입력받은 수 제곱만큼의 2차원 배열을 할당 및 생성을 하고, 프로그램을 돌릴 때마다 다른 값을 받기 위해 srand time을 사용했습니다.

이번 코드를 작성하면서 아쉬운 점이 있다면, 2차원 배열에서 한 번에 정리하는 법을 알지 못해서, 1차원 배열로 값을 넘겨준 다음에 많은 정렬들 중에서 쉽고 간단한 버블 정렬을 이용한 후, 다시 2차원 배열로 넘겨주었습니다.

 

(버블 정렬은 구현하기 쉽지만, 알고리즘적으로 봤을 때는 효율적이지는 않습니다.)

배열의 값을 5로 주었을때,

2차원 배열로 한 번에 정리하는 법이 있다면 다시 글을 올리겠습니다.

 

#이 문제의 출처는 kw대학교 컴퓨터 정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.

관련글 더보기

댓글 영역