1. 程式人生 > >C語言實現:合併兩個有序的陣列,合併後的陣列依然有序

C語言實現:合併兩個有序的陣列,合併後的陣列依然有序

環境: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; }

執行結果:

這裡寫圖片描述