메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

C/C++/MFC

C기초 합병정렬(MERGE SORT)

2008.03.14 23:19

WhiteAT 조회 수:12275

합병정렬(MERGE SORT)


// win4.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;

class CWATmergesort
{ 
private: 
 int *x,*y,*z; 
 int items1,items2; 
public: 
 CWATmergesort(int,int); 
 ~CWATmergesort(); 
 void input1(int []); 
 void input2(int []); 
 void msort(int [], int); 
 void display(); 
 void sort();
};


CWATmergesort::CWATmergesort(int p,int q)
{ 
 items1=p; 
 items2=q; 
 x=new int[items1]; 
 y=new int[items2]; 
 z=new int[items1+items2];
}

CWATmergesort::~CWATmergesort()
{ 
 delete [] x; 
 delete [] y; 
 delete [] z;
}

void CWATmergesort::input1(int a[])
{ 
 for(int i=0;i<items1;i++) 
  x[i]=a[i]; 
 msort(x,items1); 
 cout<<"\n Sorted first array :"; 
 for(i=0;i<items1;i++) 
  cout<<setw(5)<<x[i];
}

void CWATmergesort::input2(int b[])
{ 
 for(int i=0;i<items2;i++) 
  y[i]=b[i]; 
 msort(y,items2); 
 cout<<"\n Sorted second array : "; 
 for(i=0;i<items2;i++) 
  cout<<setw(5)<<y[i];
}

void CWATmergesort::msort(int m[],int n)
{
int swap=1; 
 for(int i=0;i<n && swap==1;i++) 
 { 
 swap=0; 
 for(int j=0;j<n-(i+1);j++) 
  { 
  if(m[j]>m[j+1]) 
   { 
   int temp; 
   temp=m[j]; 
   m[j]=m[j+1]; 
   m[j+1]=temp; 
   swap=1; 
   } 
  } 
 }
}

 void CWATmergesort::display()
{ 
 cout<<"\n Sorted elements are :"; 
 for(int i=0;i<items1+items2;i++) 
  cout<<setw(5)<<z[i];
}

void CWATmergesort::sort()
{ 
 int i,j,k; 
 i=j=k=0; 
 while((i<items1) && (j<items2)) 
 {
if(x[i]<y[j]) 
  {
 z[k]=x[i]; 
  i++; 
  k++; 
  } 
 else 
  { 
  if(x[i]>y[j]) 
   { 
   z[k]=y[j]; 
   j++; 
   k++; 
   } 
  else 
   { 
   z[k]=x[i]; 
   i++; 
   j++; 
   k++; 
   } 
  } 
 } 
 while(i<items1) 
 { 
 z[k]=x[i]; 
 i++; 
 k++; 
 } 
 while(j<items2) 
 { 
 z[k]=y[j]; 
 j++; 
 k++; 
 }
}

int main()
{ 
 int elements1[100]={1,2,13,4,7};   
 int n1=5;
 int elements2[100]={111,222,33,44,77};   
 int n2=5;

  CWATmergesort obj(n1,n2); 
 obj.input1(elements1); 
 obj.input2(elements2); 
 obj.sort(); 
 obj.display(); 
 return 0;
}
<결과>
 Sorted first array :    1    2    4    7   13
 Sorted second array :    33   44   77  111  222
 Sorted elements are :    1    2    4    7   13   33   44   77  111  222
Press any key to continue  



관련 문서가 검색되었습니다.
  1. [2013/06/25] string array to string (스트링 문자열 합치기) by WhiteAT (23713)
  2. [2013/06/20] 5명의 키를 읽어 들여 가장 큰 키와 작은 키를 구하는 프로그램을 작성하시오 by Question (12064) *1
  3. [2011/03/29] C# DataGridView 간단하게 필터 기능 사용하기 by WhiteAT (27985)
  4. [2010/09/17] ListView Sort 정렬하기 by WhiteAT (22346) *1
  5. [2008/03/14] 쉘 정렬(SHELL SORT) by WhiteAT ()
  6. [2008/03/14] 퀵 정렬(QUICK SORT) by WhiteAT ()
  7. [2008/03/14] 힙 정렬(HEAP SORT) by WhiteAT ()
  8. [2008/03/14] 버블 정렬(BUBBLE SORT) by WhiteAT ()