C語言實現:合併兩個有序的陣列,合併後的陣列依然有序
阿新 • • 發佈:2019-02-06
環境:win10,vs2103
演算法:
本題的題眼是”有序的陣列“,我們可以利用兩個有序的陣列。
例如:給出兩個升序陣列
先建立一個新陣列,此陣列的大小大於或者等於兩個已知陣列大小的和。通過比較兩個有序陣列中的元素,誰小就把誰放到空陣列,直到其中一個數組為空,最後把剩下的陣列全部放到建立的數組裡
#include<stdio.h>
#include<stdlib.h>
int* Merge(int*array1,int size1, int* array2,int size2)
{
int index1 = 0;
int index2 = 0;
int index = 0;
int*pTemp =malloc(sizeof(size1+size2));//建立一個大小為已知兩個陣列大小和的陣列,用pTemp標記
while (index1 < size1&&index2 < size2)//迴圈到其中一個數組為空,就退出迴圈
{
if (array1[index1] < array2[index2])//如果陣列1的元素小於陣列2的元素,就把陣列1的元素放到新陣列
pTemp[index++] = array1[index1++];
else
pTemp[index++] = array2[index2++];//否則就把陣列2的元素放到新陣列
}
if (array1[index1])//退出迴圈後,如果陣列1的元素未空,就把陣列1的元素都放到新陣列中,因為陣列1是有序的,所以不用排序
pTemp[index++] = array1[index1++];
if (array2[index2])//退出迴圈後,如果陣列2的元素未空,就把陣列2的元素都放到新陣列中,因為陣列2是有序的,所以不用排序
pTemp[index++] = array2[index2++];
return pTemp;
}
int main()
{
int *p;
int size1 = 0;
int size2 = 0;
//int num = 0;
int array1[] = { 1, 4, 6, 7, 9, 12 };
int array2[] = { 2, 3, 4, 5, 6, 7, 8, 10 };
size1 = sizeof(array1) /sizeof (array1[0]);//陣列1的元素個數
size2 = sizeof(array2) / sizeof (array2[0]); //陣列2的元素個數
int num = size1 + size2;
int array[20] = { 0 };//新陣列,此陣列的大小必須大於或者等於陣列1和陣列2的大小之和
p=Merge(array1, size1, array2, size2);
for (int i = 0; i < num; ++i)//列印新陣列
{
array[i] = *p++;
printf("%d ", array[i]);
}
printf("\n");
system("pause");
return 0;
}
執行結果: