Skip to content

Commit 9266606

Browse files
committed
Merge Sort
1 parent c1bf5e9 commit 9266606

File tree

4 files changed

+108
-41
lines changed

4 files changed

+108
-41
lines changed

Merge_Sort.cpp

+48-41
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,62 @@
1-
#include <stdio.h>
1+
#include<iostream>
2+
#include<algorithm>
23

3-
int number = 10;
4-
int data[10] = {2,4,1,3,8,5,9,7,6,10};
4+
using namespace std;
55

6-
void quickSort(int *data, int start, int end ){
7-
if(start >= end){ // 원소가 1개인 경우
8-
return;
9-
}
10-
11-
int key = start; // 키는 첫번째 원소
12-
int i = start + 1;
13-
int j = end;
14-
int temp;
15-
16-
while(i <= j){ //엇갈릴 때까지 반복
17-
while(data[i] <= data[key]){
6+
int number = 8;
7+
int sorted[8]; // 정렬 배열은 반드시 전역변수로 선언
8+
9+
void merge(int a[], int begin, int middle, int end){
10+
int i = begin;
11+
int j = middle+1;
12+
int k = begin;
13+
//작은 순서대로 배열에 삽입 =
14+
while(i<=middle && j <= end){
15+
if(a[i]<=a[j]){
16+
sorted[k]=a[i];
1817
i++;
1918
}
20-
while(data[j] >= data[key] && j > start){
21-
j--;
19+
else{
20+
sorted[k]=a[j];
21+
j++;
2222
}
23-
if(i > j){ // 현재 엇갈린 상태면 키 값과 교체
24-
temp = data[j];
25-
data[j] = data[key];
26-
data[key] = temp;
27-
} else {
28-
temp = data[j];
29-
data[j] = data[i];
30-
data[i] = temp;
23+
k++;
24+
}
25+
//남은 데이터도 삽입
26+
if( i > middle){
27+
for(int t=j; t<=end; t++){
28+
sorted[k] = a[t];
29+
k++;
30+
}
31+
}
32+
else{
33+
for(int t=i; t<=middle; t++){
34+
sorted[k] = a[t];
35+
k++;
3136
}
3237
}
33-
quickSort(data, start, j-1);
34-
quickSort(data, j+1, end);
3538

39+
for(int t=begin; t<=end; t++){
40+
a[t] = sorted[t];
41+
}
3642
}
3743

38-
int main(void){
39-
40-
// 정렬전 리스트의 모습
41-
for(int i=0; i<10; i++){
42-
printf("%d ",data[i]);
44+
void mergeSort(int a[], int m, int n){
45+
if(m<n){
46+
int middle = (m+n)/2;
47+
mergeSort(a, m, middle);
48+
mergeSort(a, middle+1,n);
49+
merge(a, m, middle, n);
4350
}
44-
printf("\n");
45-
46-
// 정렬 과정
47-
quickSort(data, 0, number-1);
51+
}
4852

49-
//정렬 후 리스트의 모습
50-
for(int i=0;i<10; i++){
51-
printf("%d ",data[i]);
53+
int main(void){
54+
int array[number] = {1,3,2,5,6,4,7,8};
55+
mergeSort(array,0,number-1);
56+
57+
for(int i=0;i<number;i++){
58+
cout << array[i]<< ' ';
5259
}
53-
54-
return 0;
60+
61+
return 0;
5562
}

Merge_Sort.exe

2.02 MB
Binary file not shown.

Merge_sort_prac.cpp

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include<algorithm>
2+
#include<iostream>
3+
4+
using namespace std;
5+
6+
int number = 8;
7+
int sorted[8];
8+
9+
void merge(int a[], int start, int middle , int end){
10+
int i = start;
11+
int j = middle +1;
12+
int k = start;
13+
while(i<=middle && j<= end){
14+
if(a[i] <= a[j]){
15+
sorted[k] = a[i];
16+
i++;
17+
}
18+
else{
19+
sorted[k] = a[j];
20+
j++;
21+
}
22+
k++;
23+
}
24+
if(i>middle){
25+
for(int t=j; t<=end; t++){
26+
sorted[k] = a[t];
27+
k++;
28+
}
29+
}
30+
else{
31+
for(int t = i; t<=middle; t++){
32+
sorted[k] = a[t];
33+
k++;
34+
}
35+
}
36+
37+
for(int i =start; i<= end; i++){
38+
a[i] = sorted[i];
39+
}
40+
}
41+
42+
void mergeSort(int a[], int start, int end){
43+
if(start < end){
44+
int middle = (start + end)/2;
45+
mergeSort(a, start, middle);
46+
mergeSort(a, middle+1, end);
47+
merge(a, start, middle, end);
48+
}
49+
}
50+
51+
int main(void){
52+
int array[number] = {1,3,2,5,6,4,7,8};
53+
mergeSort(array,0,number-1);
54+
55+
for(int i=0;i<number;i++){
56+
cout << array[i]<< ' ';
57+
}
58+
59+
return 0;
60+
}

Merge_sort_prac.exe

2.34 MB
Binary file not shown.

0 commit comments

Comments
 (0)