代码实现
#include <stdio.h>
int main()
{
//定义两个有效数组,默认为升序
int pNum[5] = { 1, 5, 9, 34, 56 };
int pData[5] = { 4, 8, 56, 78, 89 };
int pArray[10] = { 0 };
//合并数组,边组合边排序
//pNum数组下标
int nIndex = 0;
//pData数组下标
int nIdx = 0;
//pArray数组下标
int nCount = 0;
//两边数组排序完成,退出循环
while ((nIndex < 5) || (nIdx < 5))
{
//如果pNum数组排完了,pData数组没有排完
if ((nIndex == 5) && (nIdx != 5))
{
//将剩下的pData数组排到pArray数组后面
for (; nIdx < 5; ++nIdx)
{
pArray[nCount] = pData[nIdx];
nCount++;
}
}//如果pData数组排完了,pNum数组没有排完
else if ((nIndex != 5) && (nIdx == 5))
{
//将剩下的pNum数组排到pArray数组后面
for (; nIndex < 5; ++nIndex)
{
pArray[nCount] = pNum[nIndex];
nCount++;
}
}//pNum数组和pData数组都没有排完
else
{
//pNum的值小于pData的值
if (pNum[nIndex] < pData[nIdx])
{
//将pNum的值赋值给pArray
pArray[nCount] = pNum[nIndex];
//赋值完成后pArray下标加1
nCount++;
//pNum下标加1
nIndex++;
}//pNum的数值大于pData的数值
else if (pNum[nIndex] > pData[nIdx])
{
//将pData的数值赋值给pArray
pArray[nCount] = pData[nIdx];
//赋值完成之后pArray的下标加1
nCount++;
//pData下标加1
nIdx++;
}//如果两者相等
else
{
//将pNum、pData的数值都赋值给pArray,这里没有先后循序,只要赋值完后下标加1即可
pArray[nCount] = pNum[nIndex];
nCount++;
pArray[nCount] = pData[nIdx];
nCount++;
nIndex++;
nIdx++;
}
}
}
//输出排序好的新序列
printf("排序好的新序列为:\n");
for (nIndex = 0; nIndex < (sizeof(pArray) / sizeof(pArray[0])); ++nIndex)
{
printf("%d ", pArray[nIndex]);
}
printf("\n");
return 0;
}