void merge(int data[][4],int n, int left,int middle1, int middle2, int right, int a)
{
int leftind=left;
int rightind=middle2;
int com=left;
int comed[6000][4];
while(leftind<=middle1 && rightind<=right) //leftind가 middle1보다 작거나같을때 이거나 rightind가 right보다 작거나 같을때가 아닐때까지 수행하라
{ //while문시작
if(data[leftind][a]<=data[rightind][a]) //만약 data[leftind][a]가 data[rightind][a]보다 작거나 같다면 다음을 수행하라
{ //if 문 시작
comed[com][0]=data[leftind][0]; //data[leftind][0]를comed[com][0]에 입력
comed[com][1]=data[leftind][1]; //data[leftind][1]를comed[com][1]에 입력
comed[com][2]=data[leftind][2]; //data[leftind][2]를comed[com][2]에 입력
comed[com][3]=data[leftind][3]; //data[leftind][3]를comed[com][3]에 입력
com++; //com에 +1
leftind++; //leftind에 +1
} //if 문 끝
else //만약 data[leftind][a]가 data[rightind][a]보다 크다면 다음을 수행하라
{ //else문 시작
comed[com][0]=data[rightind][0]; //data[rightind][0]를 comed[com][0]에 입력
comed[com][1]=data[rightind][1]; //data[rightind][1]를 comed[com][1]에 입력
comed[com][2]=data[rightind][2]; //data[rightind][2]를 comed[com][2]에 입력
comed[com][3]=data[rightind][3]; //data[rightind][3]를 comed[com][3]에 입력
com++; //com에 +1
rightind++; //rightind에 +1
} //else문 끝
} //while문 끝
if(leftind==middle2) //만약 leftind과 middle2가 같다면 다음을 수행하여라
{ //if문 시작
while(rightind<=right)//rightind가 right보다 커질때까지 다음을수행하여라
{
comed[com][0]=data[rightind][0]; //data[rightind][0]를 comed[com][0]에 입력
comed[com][1]=data[rightind][1]; //data[rightind][1]를 comed[com][1]에 입력
comed[com][2]=data[rightind][2]; //data[rightind][2]를 comed[com][2]에 입력
comed[com][3]=data[rightind][3]; //data[rightind][3]를 comed[com][3]에 입력
com++; //com에 +1
rightind++; //rightind에 +1
}//while문 끝
}//if 문 끝
else //만약 leftind과 middle2가 같지 않다면 다음을 수행하여라
{
while(leftind<=middle1) //leftind가 millde1보다 클때까지 다음을 수행하여라
{ //while문 시작
comed[com][0]=data[leftind][0]; //data[leftind][0]를 comed[com][0]에 입력
comed[com][1]=data[leftind][1]; //data[leftind][1]를 comed[com][1]에 입력
comed[com][2]=data[leftind][2]; //data[leftind][2]를 comed[com][2]에 입력
comed[com][3]=data[leftind][3]; //data[leftind][3]를 comed[com][3]에 입력
com++; //com에 +1
leftind++; //leftind에 +1
} //while문 끝
}//else문 끝
for(int i=left; i<=right; i++) //left가 i이고 i를 1씩 추가하여 i가 right보다 작을때까지 수행하여라
{ //for문 시작
data[i][0]=comed[i][0]; //comed[i][0]를 data[i][0]에 입력
data[i][1]=comed[i][1]; //comed[i][1]를 data[i][1]에 입력
data[i][2]=comed[i][2]; //comed[i][2]를 data[i][2]에 입력
data[i][3]=comed[i][3]; //comed[i][3]를 data[i][3]에 입력
} //for문 끝
}
void merge(int data[][4],int n , int low,int high ,int a)
{
if((high-low)>=1)
{
int middle1= (high+low)/2;
int middle2=middle1+1;
merge(data,n,low,middle1, a);
merge(data,n,middle2,high, a);
merge(data,n,low,middle1,middle2,high, a);
}
}
int solving (int(*data)[4])
{
int i; //for문을 위한
int swap;// onedata swap을 위한
int count1=0;
int count2=0;
for(i=0; i<size;i++)
{
if(data[i][1]>data[i][2])
{
swap=data[i][2];
data[i][2]=data[i][1];
data[i][1]=swap;
data[i][3]=1;
}
}
merge(data,size , 0,5999 ,2);
merge(data,size , 0,5999 ,1);
for(i=0;i<size;i++)
{
if(data[i][3]==0)
{
space[count1][0]=data[i][0];
count1++;
}
else if (data[i][3]==1)
{
space[size-1-count2][0]=data[i][0];
count2++;
}
}
return 0;
}
뭔놈의 소트가 이리 길어...버블 소트밖에 모름 코드 보기 귀차늠
내가 설명해 줄테니 자바로 바꿔와