Esempio n. 1
0
/**
 * @brief 一趟归并算法
 * @param arr
 * @param first
 * @param last
 * @param temp
 */
void MergePass(int *arr, int first, int last, int *temp)  
{  
	if(first < last)  
	{  
		int mid = (first + last) / 2;  
		MergePass(arr, first, mid, temp);    //左边有序  
		MergePass(arr, mid + 1, last, temp); //右边有序  
		Merge(arr, first, mid, last, temp); //再将二个有序数列合并  
    }
}  
Esempio n. 2
0
void MergeSort(SqList *L) {
  int *TR = (int *) malloc(L->length * sizeof(int));
  int k = 1;
  while (k < L->length) {
    MergePass(L->r, TR, k, L->length);
    k = 2 * k;
    MergePass(TR, L->r, k, L->length);
    k = 2 * k;
  }
}
Esempio n. 3
0
void AlphaBetaEngine::MergeSort(STONEMOVE *source, int n)
{//降序排序
	int s = 1;
	while(s < n)
	{
		MergePass(source, m_TargetBuff, s, n);
		s += s;
		MergePass(m_TargetBuff, source, s, n);
		s += s;
	}
}
Esempio n. 4
0
void CHistoryHeuristic::MergeSort(CHESSMOVE *source, int n, BOOL direction)
{
	int s = 1;
	while(s < n)
	{
		MergePass(source, m_TargetBuff, s, n, direction);
		s += s;
		MergePass(m_TargetBuff, source, s, n, direction);
		s += s;
	}
}
void MergeSort(redtype a[],redtype b[],int n)
{
    int gap=1;
    while(gap<n)
    {
        MergePass(a,b,gap,n);
        gap*=2;
        MergePass(b,a,gap,n);
        gap*=2;
    }
}
Esempio n. 6
0
void MergeSortByNonRecursiveImpl(ElementType S[], long N)
{
    long length = 1;
    ElementType *TmpS = malloc(N * sizeof(ElementType));
    while (length < N)
    {
        MergePass(S, TmpS, N, length);
        length *= 2;
        MergePass(TmpS, S, N, length);
        length *= 2;
    }
    free(TmpS);
}
Esempio n. 7
0
void MergeSort(Element *list, const int n)
// Sort list @list@ into nondecreasing order of the keys @list[1].key@, ..., @list[n].key@.
{
    Element *tempList = new Element[n+1];
    // @l@ is the length of the sublist currently being merged
    for (int l = 1; l < n; l *= 2)
    {
        MergePass(list, tempList, n, l);
        for (int m = 1; m <= 10; m++) cout << tempList[m].getKey() << " , ";
        cout << endl;
        l *= 2;
        MergePass(tempList, list, n, l); // interchange role of @list@ and @tempList@
        for (m = 1; m <= 10; m++) cout << list[m].getKey() << " , ";
        cout << endl;
    }
    delete [] tempList;
}
Esempio n. 8
0
/**
 * @brief 归并排序算法
 * @param arr
 * @param n
 */
void MergeSort(int *arr, int n)  
{  
	int *temp = new int[n];  
	if(temp == NULL)  
		return;  
	MergePass(arr, 0, n - 1, temp);  
	delete[] temp;  
}  
Esempio n. 9
0
void NoRecursionMergeSort(int* pData, int nLength)
{
	// i: 用来控制归并排序的趟数,需要进行logn趟排序。
	int i = 1;
	// 第1趟排序的单元是2^0个,第2趟排序的单元是2^1个,第n趟排序的单元是2^(n-1)个。
    for (; i < nLength; i *= 2)
	{
		// 做一趟归并排序。
		MergePass(pData, i, nLength);
	}
}
Esempio n. 10
0
File: e11.cpp Progetto: cqiyi/kaoshi
void Mergesort() {
	int length,k;
	for (length=1; length<n; length*=2) {
		MergePass(length);
		if (m==(int)(log(length))+1) {
			printf("第%d趟的结果是:",m);
			for (k=1; k<=n; k++)
				printf("%5d",R[k].key);
			printf("\n");
			printf("请输入还要输出第几趟结果,不想输出时请输入0:");
			scanf("\n%d",&m);
		}
	}
	printf("最终排序结果是:");
	for (k=1; k<=n; k++)
		printf("%5d",R[k].key);
	printf("\n");
}/*Mergesort*/
Esempio n. 11
0
void MergeSortB(std::vector<T> &vec)
{
	int length;
	for (length = 1; length < vec.size(); length = length * 2)
		MergePass(vec, length);
}