1. 程式人生 > 實用技巧 >定義與引數_函式宣告示例

定義與引數_函式宣告示例

兩個有序陣列nums1、nums2,陣列元素個數為m、n,將nums2合併到nums1中,使nums1成為有序陣列,假設nums1有足夠的空間。

//第一次嘗試:
//本題
//第一種辦法是將兩個數組合並之後在進行排序,就好了;
//第二種辦法是設定兩個標誌位a、b,然後將a從nums1的首位開始,將b從nums2的首位開始,然後開始遍歷nums1和nums2,比較nums[a]和nums2[b],
// 然後將小的數放到一個新開闢的空間num,再然後將小的數的標誌位++,直到遍歷完畢,如果某個陣列先遍歷完,那麼只需將另一個數組剩餘元素放到num中即可;
//第三種也就是我寫的這個辦法,第二種辦法重新開闢了新的空間,不夠完美,其實我們可以將第二種改進一下,我們將元素從後往前放到nums1陣列(num1足夠大),
// 具體方法還是和第二種一樣設定兩個標誌位a、b,將a從nums1的最後一個元素開始,b從nums2的最後一個元素開始,然後比較nums[a]和nums2[b],
// 將大的數放到num1中的count=m+n-1的位置上,讓後count--,大數的標誌位--,直到遍歷完畢,如果某個陣列先遍歷完,那麼只需將另一個數組剩餘元素放到num中即可;

#include<stdio.h> #include<stdlib.h> void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { int count = m + n - 1; m--, n--; while (m >= 0 || n >= 0) { if (nums1[m] < nums2[n]) { nums1[count] = nums2[n]; count
--; n--; } else { nums1[count] = nums1[m]; count--; m--; } } } int main() { int num1[] = { 1,2,3,5,6,0,0,0 }; int num2[] = { 4,6,9 }; merge(num1, sizeof(num1) / sizeof(num1[0]), 5, num2, sizeof(num2) / sizeof(num2[0]), 3
); for (int i = 0; i < sizeof(num1) / sizeof(num1[0]); i++) { printf("%d\n", num1[i]); } return 0; }