void Merge(int* pData, int start, int mid, int end, int* pTemp)
{
int i_start = start;
int i_end = mid;
int j_start = mid + 1;
int j_end = end;
int nlength = 0;
while (i_start <= i_end && j_start <= j_end)
{
if (pData[i_start] <= pData[j_start])
{
pTemp[nlength] = pData[i_start];
++nlength;
++i_start;
}
else
{
pTemp[nlength] = pData[j_start];
++nlength;
++j_start;
}
}
while (i_start <= i_end)
{
pTemp[nlength] = pData[i_start];
++nlength;
++i_start;
}
while (j_start <= j_end)
{
pTemp[nlength] = pData[j_start];
++nlength;
++j_start;
}
for (int i = 0; i < nlength; ++i)
pData[start + i] = pTemp[i];
}
void MergeSort(int* pData, int start, int end, int* pTemp)
{
if (start >= end)
return;
int mid = (start + end) / 2;
MergeSort(pData, start, mid, pTemp);
MergeSort(pData, mid+1, end, pTemp);
Merge(pData, start, mid, end, pTemp);
}
归并排序实现
最新推荐文章于 2024-09-11 19:54:50 发布