해당 기능은 반드시 구현을 해주셔야해요! 원격 강의를 들었다면 어렵지 않게 할 수 있습니다!
사용자가 입력한 숫자 배열을 정렬하는 프로그램을 구현해보세요.
algorithm 헤더의 sort 함수를 사용하지 않고 직접 구현해보세요.정렬 알고리즘에 대한 이해가 있어야 도전 기능을 마무리 할 수 있는데요!
구글에 정렬 알고리즘을 검색해서 쉬운 정렬 알고리즘에 대해서 공부해보고
적용하면 여러분들에게도 큰 의미가 있을겁니다!
#include <iostream>
using namespace std;
// 배열을 인자로 넘겨 받아서 배열 원소들의 합계를 반환하는 함수를 구현해봅니다.
int Sum(int arrnum[], int size)
{
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arrnum[i];
}
return sum;
}
// 배열을 인자로 넘겨 받아서 배열 원소들의 평균을 반환하는 함수를 구현해봅니다.
double Avg(int arrnum[], int size)
{
double sum = Sum(arrnum , size);
return sum / size;
}
// 오름차순 정렬
void sortAscending(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 내림차순 정렬
void sortDescending(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
cout << "- - - - - - - 필수 기능 구현 - - - - - - -" << endl;
const int size = 5;
int num[size];
for (int i = 0; i < size; i++) {
// 사용자로부터 5개의 숫자를 입력 받습니다.
cout << i+1 << ". 숫자를 입력하세요 : ";
// 입력 받은 숫자를 배열에 저장합니다.
cin >> num[i];
}
// 위에서 만든 합계 함수와 평균 함수를 호출하여 합계와 평균을 출력합니다.
cout << "입력 한 숫자의 합 : " << Sum(num, size) << endl;
cout << "입력 한 숫자의 평균 : " << Avg(num, size) << endl << endl;
cout << "- - - - - - - 도전 기능 구현 - - - - - - -" << endl;
int count, choice;
cout << "정렬 할 숫자의 갯수를 입력하세요 : ";
cin >> count;
int* sortNums = new int[count];
for (int i = 0; i < count; i++) {
// 사용자로부터 5개의 숫자를 입력 받습니다.
cout << i + 1 << ". 숫자를 입력하세요 : ";
cin >> sortNums[i];
}
cout << "정렬 방식을 선택하세요 (1: 오름차순, 2: 내림차순) : ";
cin >> choice;
if (choice == 1) {
sortAscending(sortNums, count);
cout << "오름차순 정렬 결과: ";
}
else if (choice == 2) {
sortDescending(sortNums, count);
cout << "내림차순 정렬 결과: ";
}
else {
cout << "잘못된 입력입니다.";
delete[] sortNums;
return 1;
}
for (int i = 0; i < count; i++) {
cout << sortNums[i] << " ";
}
cout << endl;
delete[] sortNums;
return 0;
}
인접한 두 값을 비교해서 큰 값을 뒤로 보내는 방식의 정렬이다.
큰 값이 거품처럼 끝으로 "떠오르는" 모습에서 이름이 붙었다.
시간 복잡도는 O(n²) 이지만 구현이 아주 간단하여 알고리즘 학습용, 소규모 데이터에 적합하다. 특히 데이터가 많을수록 성능이 나쁘기 때문에 주의하자.