Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2979] merge sort관해서 3개로 나우어 merge하는건데여...이상해여
똥꾸뇩 [] 1292 읽음    2003-09-25 03:10
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

void merge_sort(int data[], int n);
void merge(int low, int middle, int high, int u[], int v[], int w[], int s[]);
int s[];

int main()
{
int n;
cout << "How many items to sort? ";
cin >> n;

int *s = new int[n];
for(int i=0;i<n;i++)
  s[i] = rand();
for(int z=0;z<n;z++)
  cout << "s[" << z << "] = " << s[z] << endl;

merge_sort(s,n);

for(int g=0;g<n;g++)
  cout << "s[" << g << "] = " << s[g] << endl;

return 0;
}

void merge_sort(int s[], int n)
{
if(n == 2)
{
  if(s[0]>s[1])
  {
  int temp = s[0];
  s[0] = s[1];
  s[1] = temp;
  }
  return;
}

if(n>2)
{

int low,middle,high;
low = n/3;
middle = ((2*n)/3) - low;
high = n-(low+middle);

int *u = new int[low];
int *v = new int[middle];
int *w = new int[high];


  for(int a=0;a<low;a++)
  u[a] = s[a];
  for(int b=low+1;b<high;b++)
  v[b] = s[b];
  for(int c=middle+1;c<n;c++)
  w[c] = s[c];

  merge_sort(u,low);
  merge_sort(v,middle);
  merge_sort(w,high);

  merge(low,middle,high,u,v,w,s);
}
}

void merge(int low, int middle, int high, int u[], int v[], int w[], int s[])
{
int i,j,k,g;
i=0;j=0;k=0;g=0;
for (i=0 ; i< (low+middle+high); i++)
{
  if(u[i] <= v[j] && u[i] <=w[k])
  {
  s[i] = u[i];
  i++;
  }
  else if(v[j] <= u[i] && v[j] <= w[k])
  {
  s[i] = v[j];
  v++;
  }
  else if(w[k] <= u[i] && w[k] <=v[j])
  {
  s[i] = w[k];
  w++;
  }

}
}

이건 제가 함 만들어 본건데여. C랑 C++을 공부 안하고 JAVA지식만으로 했거든여. 그래서인지 포인터문제인지 뭔지 모르겠지만 결과가 이렇게 나옵니다.
How many items to sort? 9
s[0] = 41
s[1] = 18467
s[2] = 6334
s[3] = 26500
s[4] = 19169
s[5] = 15724
s[6] = 11478
s[7] = 29358
s[8] = 26962
s[0] = -842150451
s[1] = 18467
s[2] = -842150451
s[3] = -842150451
s[4] = -842150451
s[5] = -842150451
s[6] = -842150451
s[7] = -842150451
s[8] = -33686019
Press any key to continue

이거 결과값이 왜 이런지를 아무리 봐도 모르겠네여.
알고리즘 자체에도 문제가 있겠지만....쩝...아....
뭐가 문제일까여! 알려주세여...ㅜ,ㅜ

+ -

관련 글 리스트
2979 merge sort관해서 3개로 나우어 merge하는건데여...이상해여 똥꾸뇩 1292 2003/09/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.