示例#1
0
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);
	}
示例#2
0
/** 
  * @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);  
    }  
} 
示例#3
0
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); //再将二个有序数列合并
    }
}
示例#4
0
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);
}
示例#5
0
文件: main.c 项目: WDayan/LastWork
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); 
    }
}
示例#6
0
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);
	}
}
示例#7
0
//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;
}
示例#10
0
Id UnitEmitter::mergeArray(const ArrayData* a) {
  auto key = ArrayData::GetScalarArrayKey(const_cast<ArrayData*>(a));
  return mergeArray(a, key);
}
示例#11
0
Id UnitEmitter::mergeArray(const ArrayData* a) {
  Variant v(const_cast<ArrayData*>(a));
  auto key = HHVM_FN(serialize)(v).toCppString();
  return mergeArray(a, key);
}