/** * @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); //再将二个有序数列合并 } }
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; } }
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; } }
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; } }
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); }
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; }
/** * @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; }
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); } }
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*/
void MergeSortB(std::vector<T> &vec) { int length; for (length = 1; length < vec.size(); length = length * 2) MergePass(vec, length); }