void mergeSort_aux(int *arr ,int *aux, int n , int left , int right) { if(left<right) { int mid = (left+right)>>1; mergeSort_aux(arr, aux , n , left , mid); mergeSort_aux(arr, aux , n , mid+1 , right); mergeArray(arr , aux , n , left , right); }
/** * @brief 归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的, * 那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了? * 可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时, * 可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先 (递归) 的分解数列, * 再 (合并) 数列就完成了归并排序。 */ void mergeSort(int a[], int first, int last, int tmp[]) { int mid; if ( first < last ) { mid = ( first + last ) / 2; mergeSort(a, first, mid, tmp); //左边有序 mergeSort(a, mid + 1, last, tmp); //右边有序 mergeArray(a, first, mid, last, tmp); } }
void merge(int a[], int first, int last, int temp[])//归并排序 { if (first < last) { int mid = (first + last) / 2; merge(a, first, mid, temp); //左边有序 merge(a, mid + 1, last, temp); //右边有序 mergeArray(a, first, mid, last, temp); //再将二个有序数列合并 } }
void merge(int* nums1, int m, int* nums2, int n) { int i = m + n -1; int j = m - 1; while (j >= 0) { nums1[i] = nums1[j]; i--; j--; } mergeArray(nums1, &nums1[i + 1], nums2, m, n); }
void mergeSort(TpContato *h,int begin,int end, TpContato *temp){ if(begin < end){ int mid = (begin + end) / 2; mergeSort(h,begin,mid,temp); mergeSort(h,mid + 1,end,temp); mergeArray(h,begin,mid,end,temp); } }
void MySort<T>::merge(T *dataList, int left, int right, T *tmp) { if (left < right) { int mid = (left + right) / 2; merge(dataList, left, mid, tmp); merge(dataList, mid+1, right, tmp); mergeArray(dataList, left, mid, right, tmp); } }
//Recursive function to split the array into sub arrays for merging void sortArray(int start, int end, int masterArray[], int tempArray[]) { int split = (start + end) / 2; if (start < end) { sortArray(start, split, masterArray, tempArray); sortArray(split + 1, end, masterArray, tempArray); mergeArray(start, split, end, masterArray, tempArray); } }
void mergeSort(int ar[],int l,int r) { int m=0; if(l<r) { m=(l+r)/2; mergeSort(ar,l,m); mergeSort(ar,m+1,r); mergeArray(ar,l,m,r); } }
int main(void){ int arrayA[5] = {0,}; int arrayB[5] = {0,}; int mergedArray[10] = {0,}; int i; printf("Input arrayA: "); for(i=0;i<5;++i) scanf("%d",&arrayA[i]); printf("Input arrayB: "); for(i=0;i<5;++i) scanf("%d",&arrayB[i]); mergeArray(arrayA,arrayB,mergedArray); printf("Merged Array: "); for(i=0;i<10;++i) printf("%d ",mergedArray[i]); printf("\n"); return 0; }
Id UnitEmitter::mergeArray(const ArrayData* a) { auto key = ArrayData::GetScalarArrayKey(const_cast<ArrayData*>(a)); return mergeArray(a, key); }
Id UnitEmitter::mergeArray(const ArrayData* a) { Variant v(const_cast<ArrayData*>(a)); auto key = HHVM_FN(serialize)(v).toCppString(); return mergeArray(a, key); }