合并函数:
void Merge(int * pArr, int low, int mid, int high)
{
int i = 0;
int leftIdx = low;
int rightIdx = mid + 1;
int * pTemp = new int[high - low + 1];
while (leftIdx <= mid && rightIdx <= high)
{
if (pArr[leftIdx] <= pArr[rightIdx])
pTemp[i++] = pArr[leftIdx++];
else
pTemp[i++] = pArr[rightIdx++];
}
while (leftIdx <= mid)
pTemp[i++] = pArr[leftIdx++];
while (rightIdx <= high)
pTemp[i++] = pArr[rightIdx++];
for (int k = 0, i = low;i <= high;i++,k++)
pArr[i] = pTemp[k];
delete [] pTemp;
}
归并排序函数:
①非递归:
void MergePass(int * pArr, int gap, int length)
{
int i;
for (i = 0;i + 2 * gap <= length;i += 2 * gap)
Merge(pArr, i, i + gap - 1, i + 2 * gap - 1);
if (i + gap < length)
Merge(pArr, i, i + gap - 1, length - 1);
}
int main()
{
using std::cout;
using std::cin;
using std::endl;
int num;
cout << "input the numbers of the array :" << endl;
cin >> num;
int * pArray = new int[num];
cout << "intput " << num << " numbers of the array :" << endl;
for (int i = 0;i < num;i++)
{
cin >> pArray[i];
}
for (int gap = 1;gap < num;gap *= 2)
MergePass(pArray, gap, num);
for (int i = 0;i < num;i++)
cout << pArray[i] << " ";
delete [] pArray;
return 0;
}
②递归:
void MergePass(int * pArr, int low, int high)
{
if (low < high)
{
int mid = (low + high) / 2;
MergePass(pArr, low, mid);
MergePass(pArr, mid + 1, high);
Merge(pArr, low, mid, high);
}
}
int main()
{
using std::cout;
using std::cin;
using std::endl;
int num;
cout << "input the numbers of the array :" << endl;
cin >> num;
int * pArray = new int[num];
cout << "intput " << num << " numbers of the array :" << endl;
for (int i = 0;i < num;i++)
{
cin >> pArray[i];
}
MergePass(pArray, 0, num - 1);
for (int i = 0;i < num;i++)
cout << pArray[i] << " ";
delete [] pArray;
return 0;
}