사용법 : MergeSort(정렬할 배열, 정렬할 배열과 같은 크기의 임시 배열, 정렬할 부분의 시작 위치, 정렬할 부분의 끝 위치);
[code cpp:nocontrols]
void MergeSort(int iArray[], int iTemp[], int iStart, int iEnd)
{
if (iStart < iEnd) {
int iMid = (iStart + iEnd)/2;
MergeSort(iArray, iTemp, iStart, iMid);
MergeSort(iArray, iTemp, iMid + 1, iEnd);
Merge(iArray, iTemp, iStart, iMid, iEnd);
}
}
void Merge(int iArray[], int iTemp[], int iLow, int iMid, int iHigh)
{
int h = iLow, i = iLow, j = iMid+1, k;
while ((h <= iMid) && (j <= iHigh)) {
if (iArray[h] <= iArray[j]) { iTemp[i] = iArray[h]; h++; }
else { iTemp[i] = iArray[j]; j++; } i++;
}
if (h > iMid) {
for (k=j; k<=iHigh; k++) {
iTemp[i] = iArray[k]; i++;
}
}
else {
for (k=h; k<=iMid; k++) {
iTemp[i] = iArray[k]; i++;
}
}
for (k=iLow; k<=iHigh; k++) iArray[k] = iTemp[k];
}
[/code]
void MergeSort(int iArray[], int iTemp[], int iStart, int iEnd)
{
if (iStart < iEnd) {
int iMid = (iStart + iEnd)/2;
MergeSort(iArray, iTemp, iStart, iMid);
MergeSort(iArray, iTemp, iMid + 1, iEnd);
Merge(iArray, iTemp, iStart, iMid, iEnd);
}
}
void Merge(int iArray[], int iTemp[], int iLow, int iMid, int iHigh)
{
int h = iLow, i = iLow, j = iMid+1, k;
while ((h <= iMid) && (j <= iHigh)) {
if (iArray[h] <= iArray[j]) { iTemp[i] = iArray[h]; h++; }
else { iTemp[i] = iArray[j]; j++; } i++;
}
if (h > iMid) {
for (k=j; k<=iHigh; k++) {
iTemp[i] = iArray[k]; i++;
}
}
else {
for (k=h; k<=iMid; k++) {
iTemp[i] = iArray[k]; i++;
}
}
for (k=iLow; k<=iHigh; k++) iArray[k] = iTemp[k];
}
[/code]
'Development > Knowledgement' 카테고리의 다른 글
| [Algorithm] Prim Algorithm (0) | 2007/05/18 |
|---|---|
| [Algorithm] Kruscal Algorithm (0) | 2007/05/18 |
| [Algorithm] Quick Sort (0) | 2007/05/18 |
| [Algorithm] Merge Sort (0) | 2007/05/18 |
| Cry Engine 2 (0) | 2007/04/25 |
| Visual Studio 단축키 (0) | 2007/04/25 |
이올린에 북마크하기
이올린에 추천하기