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