2017. 3. 24. 14:51ㆍC Algorithm
void merge_sort_internal ( int arr[] , int temp[] , int start , int middle , int end ){
int i = 0 , j = 0 , k = 0 , t = 0 ;
i = start ;
j = middle + 1;
k = start ;
while ( i <= middle && j <= end ){
if ( arr [ i ] <= arr [ j ] ){
temp [ k ] = arr [ i ] ;
i++;
}else if ( arr [ i ] > arr [ j ] ){
temp [ k ] = arr [ j ] ;
j++;
}
k++;
}
if ( i > middle ){ // 두번째 배열에 남아있는 값 처리하기
for ( t = j ; t <= end ; t++){
temp [ k ] = arr [ t ];
k++;
}
}else if ( j > end ){ //첫번째 배열에 남아있는 값 처리하기
for( t = i ; t <= middle ; t++){
temp [ k ] = arr [ t ] ;
k++;
}
}
for ( t = start ; t<= end ; t++){ // 실제배열에 대입
arr[ t ] = temp[t] ;
}
}
void merge_sort ( int arr[] , int temp[] , int start , int end ){
int middle = 0 ;
if ( start < end ) { // 배열의 요소가 1개면 실행하지않는 재귀함수
middle = ( start + end ) / 2 ;
merge_sort ( arr , temp , start , middle ) ;
merge_sort ( arr , temp , middle + 1 , end );
merge_sort_internal ( arr , temp , start , middle , end );
}
}
int main ( void ) {
int arr[] = { 100 , 65 , 36 , 73, 26 , 48 , 14 };
int temp[10];
int i = 0;
merge_sort( arr , 0 , 7 );
for ( i = 0 ; i < 8 ; i++){
printf("%d" , arr[i] );
}
return 0 ;
}
=> 오름차순 정렬되어 출력한다.
'C Algorithm' 카테고리의 다른 글
링크드리스트 ( Linked List ) (0) | 2017.04.05 |
---|---|
삽입정렬(InsertSort) & 버블정렬(BubbleSort) (0) | 2017.03.27 |
Fibonacci & Dynamic Programming( 피보나치수열 & 동적계획법) (0) | 2017.03.25 |
BinarySearch ( 이진검색 ) (0) | 2017.03.25 |
QuickSort ( 퀵정렬 ) (0) | 2017.03.24 |