Esempio n. 1
0
int main() {
  array first, second, result;

  init_array(&first, 20);
  append_in_array(&first, 10);
  append_in_array(&first, 20);
  append_in_array(&first, 30);
  append_in_array(&first, 40);
  append_in_array(&first, 50);

  init_array(&second, 5);
  append_in_array(&second, 12);
  append_in_array(&second, 15);
  append_in_array(&second, 27);
  append_in_array(&second, 29);
  append_in_array(&second, 55);

  print_array(&first);
  print_array(&second);

  merge_array(&first, &second);
  print_array(&first);

  return 0;
}
Esempio n. 2
0
void merge_sort(T a[],int begin, int end)
{
    if(!a||begin>=end) return;
    int mid = (begin+end)/2;
    merge_sort(a, begin, mid);
    merge_sort(a, mid+1, end);
    merge_array(a,begin,mid,end);
}
Esempio n. 3
0
void merge_sort(int a[], int first, int last)  
{
  if(first+1 < last)
  {
    int mid = (first+last)/2;
    merge_sort(a,first,mid);
    merge_sort(a,mid,last);
    merge_array(a,first,mid,last);
  }
}
Esempio n. 4
0
void merge_sort(int arr[],int first,int last,int tmp[])//递归地将小组分开,使每个小组变得有序 
{
	if(first < last)
	{
		int mid = (first + last)/2;
		merge_sort(arr,first,mid,tmp);
		merge_sort(arr,mid + 1,last,tmp);
		merge_array(arr,first,mid,last,tmp);
	}
}
Esempio n. 5
0
void mergesort(int *ar, int size)
{
    if(size <= 1)
        return;
    int mid = size/2;
//    QUICK_LOG("Mid is %d",mid);
    mergesort(ar, mid);
    mergesort(ar+mid, size-mid);
    merge_array(ar,mid,ar+mid,size-mid);
}
Esempio n. 6
0
static void Merge_sort(int *array, int begin, int end, int *temp)
{
    int mid  = 0;

    if(end > begin){    //还可进行拆分
   //      mid = (begin + end ) / 2;
        mid = begin + (end - begin >> 1);
        Merge_sort(array, begin, mid, temp);
        Merge_sort(array, mid + 1, end, temp);
        merge_array(array, begin, mid, end, temp);
    }
Esempio n. 7
0
void merge_sort(int a[], int lo, int hi, int temp[])
{
    if(lo < hi) { //exit condition lo=hi
        int mid = (lo+hi)/2;
        // recursive
        merge_sort(a, lo, mid, temp);
        merge_sort(a, mid+1, hi, temp);
        // 2 array is in sort, merge into one array
        merge_array(a, lo, hi, temp);
    }
}
Esempio n. 8
0
void
merge_sort (int data[], int start, int end)
{
  if (start < end && data)
    {
      int mid = (end + start) / 2;
      merge_sort (data, start, mid);
      merge_sort (data, mid + 1, end);
      merge_array (data, start, mid, end);
    }

}
Esempio n. 9
0
void merge_sort(int *a, int length) {


    if (length>1)
    {

        merge_sort(a,length/2);
        merge_sort(a+length/2,length-length/2);

        merge_array(a,length/2,a+length/2,length-length/2);
    }



}
Esempio n. 10
0
void merge_sort(int a[], int begin, int end, int tmp[])
{
	int mid = (end+begin)/2;

	if(begin == end)
		return;

	// sub array A, B is sorted
	merge_sort(a, begin, mid, tmp);
	merge_sort(a, mid+1, end, tmp);

	// merge A and B
	merge_array(a, begin, mid, end, tmp);
	
}
Esempio n. 11
0
void merge_sort(int *a, int len)
{
	 if( len > 1 )
	 {
		 int *a1 = a;
		 int len1 = len/2;
		 int *a2 = a+len1;
		 int len2 = len - len1;
		 merge_sort(a1, len1);
		 merge_sort(a2, len2);

		 merge_array( a1, len1,  a2, len2);
	 }

}
Esempio n. 12
0
void do_merge_sort(T* array, T* widget, int dest, int size, int max_size)
{
	T* space = new T[max_size];
	memset(space, 0, sizeof(space));
	if (size <= 1)
	{
		widget[dest] = array[dest];
		return;
	}
	int index = dest + size / 2;
	int size1 = index - dest;
	int size2 = dest + size - index;
	do_merge_sort(array, space, dest, size1, max_size);
	do_merge_sort(array, space, index, size2, max_size);
	merge_array(space, widget, dest, index, size);
	delete [] space;
}
Esempio n. 13
0
/* omp version of qsort */
static void omp_qsort (int* base, size_t num, size_t size, int (*comp)(const void*,const void*))
{
	int i;
	int *index;
	index = (int *)malloc((omp_threads+1)*sizeof(int));

	omp_set_num_threads(omp_threads);
	
	for(i = 0; i < omp_threads; i++) {
		index[i]= (i*num/omp_threads);
	}
	
	index[omp_threads] = num;

	/* Sort partial arrays in parallel */
	#pragma omp parallel for private(i)
	for(i=0; i<omp_threads; i++) {
		qsort(base+index[i], index[i+1]-index[i], size, comp);
	}

	/* Merge sorted array pieces */
	merge_array(base, num, index);
}