intcompare(void* a, void*b){ return *(int*)a - *(int*)b; }
voidmerge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ for(int i = 0; i < n; ++i){ nums1[m+i] = nums2[i]; } qsort(nums1, m+n, sizeof(int), compare); }
voidreverse(int* nums,int start, int end) { int i = start; int j = end - 1; int temp; while (i<j) { temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; i++; j--; } }
voidexchange(int* nums,int start, int mid, int end) { reverse(nums, start, mid); reverse(nums, mid, end); reverse(nums, start, end); }
voidmerge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ for(int i = 0; i < n; ++i){ nums1[m+i] = nums2[i]; }
int i = 0; int j = m; int mid = m; while (i < j && j < m+n) { int step=0; while (i < j && nums1[i] <= nums1[j]) i++; while (j < m+n && nums1[j] < nums1[i]) { j++; step++; } exchange(nums1,i,mid,j); i += step; mid = j; } }