C++
#include <iostream>
//bubble_sort
using namespace std;
void bubble_sort(int nums[], const int& SIZE);
void printNums(int nums[], const int& SIZE);
void swap(int* p1, int* p2);
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
int inputNumber;
int nums[1000];
cin >> n;
//n번째까지 입력을 받습니다.
for (int i{ 0 }; i < n; i++){
cin >> nums[i];
}
//정렬합니다.
bubble_sort(nums, n);
//출력합니다.
printNums(nums, n);
return 0;
}
void bubble_sort(int nums[], const int& SIZE){
//변수 i의 역할:SIZE - 1번 반복합니다.
for (int i{ 0 }; i < SIZE - 1; i++){
//변수 j의 역할:배열을 순회합니다. 이때, 점점 순회하면서 순회 횟수는 줄입니다.
for (int j{ 0 }; j < SIZE - i - 1 ; j++){
if (nums[j] > nums[j+1])
swap(nums[j], nums[j+1]);
}
}
}
void swap(int* p1, int* p2){
int* temp = p1;
p1 = p2;
p2 = p1;
}
void printNums(int nums[], const int& SIZE){
for (int i{ 0 }; i < SIZE; i++)
printf("%d\n", nums[i]);
}
#include <iostream>
//selection_sort
using namespace std;
void selection_sort(int nums[], const int& size);
void printNums(int nums[], const int& n);
int main(void){
int size;
cin >> size;
int nums[1000];
ios_base::sync_with_stdio(false);
cin.tie(NULL);
for (int i{ 0 }; i < size; i++){
cin >> nums[i];
}
//selection_sort 실행합니다.
selection_sort(nums, size);
//출력합니다.
printNums(nums, size);
}
void selection_sort(int nums[], const int& SIZE){
int indexMin;
//n-1번 반복합니다.
//이때, 정렬되지 않는 배열의 맨 앞 index 번호는 i입니다.
for (int i{ 0 }; i < SIZE - 1; i++){
indexMin = i;
//i + 1번째부터 맨 끝까지 순회하면서
//정렬되지 않는 배열 원소의 최솟값 index를 찾습니다.
//찾은 index는 indexMin으로 저장합니다.
for (int j{ i + 1 }; j < SIZE; j++){
if (nums[indexMin] > nums[j]){
indexMin = j;
}
}
//temp:정렬되지 않는 가장 작은 값을 임시 저장합니다.
int temp = nums[indexMin];
//맨 앞 원소랑 가장 작은 원소랑 exchange 합니다.
nums[indexMin] = nums[i];
//맨 앞 원소에 가장 작은 값을 저장하여 오름차순 정렬합니다.
nums[i] = temp;
}
}
void printNums(int nums[], const int& n){
for (int i{ 0 }; i < n; i++)
printf("%d\n", nums[i]);
}
#include <iostream>
//insertion_sort
using namespace std;
void insertion_sort(int nums[], const int& SIZE);
void printNums(int nums[], const int& SIZE);
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
int inputNumber;
int nums[1000];
cin >> n;
//n번째까지 입력을 받습니다.
for (int i{ 0 }; i < n; i++){
cin >> nums[i];
}
//정렬합니다.
insertion_sort(nums, n);
//출력합니다.
printNums(nums, n);
return 0;
}
void insertion_sort(int nums[], const int& SIZE){
//i:1부터 시작 (n-1까지 반복)
for (int i{ 1 }; i < SIZE; i++){
int j = i;
//temp:정렬되지 않는 배열의 맨 앞 원소의 값(옮길 원소, 대상 원소).
int temp = nums[i];
while (j > 0 && nums[j - 1] > temp){
//nums[j-1] 왼쪽 값을 오른쪽으로 push
nums[j] = nums[j - 1];
j--;
}
nums[j] = temp;
}
}
void printNums(int nums[], const int& SIZE){
for (int i{ 0 }; i < SIZE; i++)
printf("%d\n", nums[i]);
}
#include <iostream>
//merge_sort
using namespace std;
void sort(int arr[], const int first, const int last);
void merge(int arr[], const int first, const int mid ,const int last);
void print(int arr[], const int& SIZE);
int main(void){
int arr[1000];
//size를 입력받습니다.
int size;
cin >> size;
//배열 원소 값을 입력 받습니다.
for (int i{ 0 }; i < size; i++){
cin >> arr[i];
}
//오름차순 병합정렬(합병정렬) 합니다.
sort(arr, 0, size - 1);
//정렬된 배열을 출력합니다.
print(arr, size);
return 0;
}
void sort(int arr[], const int first, const int last){
if (first < last){
int mid = (first + last) / 2;
sort(arr, first, mid);
sort(arr, mid + 1, last);
merge(arr, first, mid, last);
}
}
void merge(int arr[], const int first, const int mid, const int last){
int* param = new int[last - first + 1];
int i = first, j = mid + 1, k = 0; //k:param 배열의 맨 앞 원소의 index
while(i <= mid && j <= last){
if (arr[i] <= arr[j]){
param[k++] = arr[i++];
}
else {
param[k++] = arr[j++];
}
}
//두개의 분할된 배열 중 하나가 이미 다 정렬되어 있다면, 남은 배열 순차적으로 param 배열에 저장한다.
if (i > mid){
while(j <= last){
param[k++] = arr[j++];
}
}
else{
while(i <= mid){
param[k++] = arr[i++];
}
}
//param 임시 배열의 원소 값을 arr 배열에 할당한다.
for (i = first, k = 0; i <= last;){
arr[i++] = param[k++];
}
//임시 배열 param 동적 메모리 해제합니다.
delete[] param;
}
void print(int arr[], const int& SIZE) {
for (int i { 0 }; i < SIZE; i++)
printf("%d\n", arr[i]);
}