合并排序 算法实现
2010-06-13 13:52
218 查看
合并排序主要思想:把两个已经排序好的序列进行合并,成为一个排序好的序列。
复杂度:nlgn
稳定排序
实现
复杂度:nlgn
稳定排序
实现
#include "stdafx.h" #define INT_MAX 9999999 // 合并[pn, pm)[pm,pn) // 其中[pn, pm)[pm,pn) 分别为已经排序的队列 void MergingSort(int nData[], int nP, int nM, int nR) { int nPrev = nM - nP; int nLast = nR - nM; int* pPrev = new int[nPrev+1]; int* pLast = new int[nLast+1]; for(int i=0; i<nPrev; i++) { pPrev[i] = nData[nP+i]; } pPrev[nPrev] = INT_MAX; for(int j=0; j<nLast; j++) { pLast[j] = nData[nM+j]; } pLast[nLast] = INT_MAX; nPrev = 0; nLast = 0; while(nP < nR) { nData[nP++] = pPrev[nPrev] < pLast[nLast] ? pPrev[nPrev++] : pLast[nLast++]; } delete [] pPrev; delete [] pLast; } bool Merge(int nData[], int nBegin, int nEnd) { if(nBegin >= nEnd-1) { return false; } int nMid = (nEnd + nBegin)/2; Merge(nData, nBegin, nMid); Merge(nData, nMid, nEnd); MergingSort(nData, nBegin, nMid, nEnd); return true; } int _tmain(int argc, _TCHAR* argv[]) { int nData[] = {1,3,5,7,9,2,4,6,8,0}; Merge(nData,0,10); for(int i=0; i<10; i++) { printf("%d", nData[i]); } return 0; }
相关文章推荐
- PHP实现归并排序(合并排序)--算法原理分析
- 算法学习与代码实现3——合并排序
- 算法入门->合并排序->C/C++ 语言实现
- Clojure:算法练习的实现(一)——合并排序
- scala数据结构和算法-02-用模式匹配实现合并排序
- 基础算法之合并排序Java实现
- Clojure:算法练习的实现(二)——合并排序
- 深度学习基础模型算法原理及编程实现--02.线性单元
- 白话经典算法系列之二 直接插入排序的三种实现
- 【算法】—— 算法实现的 tricks
- 算法与数据结构基础7:C++双链表的简单实现
- 用简单的算法实现过滤数据的功能—众学
- 三杯水问题 算法分析、设计与实现(Java)
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】
- PID连续控制算法的表达式以及C语言实现
- 算法学习之旅,初级篇(21)--栈的实现
- 权重选择算法Java实现
- 智能蛇实现的算法
- HTML5 实现图像模糊算法
- 【算法导论】简单哈希表的除法实现