返回首页

简介
合并排序算法和选择排序算法是用C语言实现(无论是在正常和模板版本)。
归并[1 .. ñ]
1。如果输入序列中只有一个元素
??返回
2。输入序列分割成两部分
3。使用相同的算法排序的两个子序列
4。合并排序的两个子序列,形成了输出序列
分而治之
?,这是一个算法设计范例,它包含以下步骤?
鸿沟:分解成更小的问题
子问题?
重复执行:解决每个子问题
递归?
征服:结合每个子问题的解决方案,以形成解决问题的办法
合并排序??为O(N *日志N)
??假设你是250,000,000项目排序
N = 250,000,000
N ・日志N = 250,000,000 * 28
假设你可以做1 /纳秒
7.25秒
合并排序AnalysisMergeSort(A,左,右)T(N)(左LT,右)为O(1) 中期:=(左,右)/ 2,O(1) 归并(一,左,中),T(N / 2) 归并(1,中,右),T(N / 2) 合并(A,左,中,右); O(N)声明工作
T(N)= O(1)当n = 1,
2T(N / 2)O(N),当n GT 1;
T(N)= O(1)当n = 1,
2T(N / 2)O(N),当n GT 1;
递推方程请使用
/ / Sorting2.cpp以下守则:定义控制台应用程序的入口点
/ /
#包括"stdafx.hquot;#包括"Sorting2.hquot;#包括LT; math.hgt;#包括LT; stringgt;#包括LT; vectorgt;#包括LT; algorithmgt;#包括LT; iteratorgt;的#ifdef _DEBUG#定义新的DEBUG_NEW#UNDEF THIS_FILE静态的char THIS_FILE [] = __FILE__;#ENDIF //////////////////////////////////////////////// ////////////////////////////// /一个和唯一的应用程序objectCWinApp theApp;无效SelectionSort(vectorlt; intgt;放大器; RDATA){ nLen = rData.size(); (nLen LT; 2) 回报;(参数nIndex = 0;(参数nIndex LT;(nLen - 1));参数nIndex){INT nKey = RDATA [参数nIndex]; nMatchingIndex =参数nIndex; (INT nFindKey =(参数nIndex,1);(nFindKey LT; nLen); nFindKey){intamp; NDATA = RDATA [nFindKey]; & #160;如果(LT; nKey NDATA) nMatchingIndex = nFindKey,nKey = NDATA; } (nMatchingIndex!=参数nIndex) 掉期(RDATA [参数nIndex],RDATA [nMatchingIndex]); }templatelt;类_IIgt; 无效SelectionSort(_II _F,_L _II){ (_F == _L) 回报;(;(H= _L);!H){_II _K​​ = _F; _II _X = _F; / /保存匹配的索引... _II _T = _F; (_II _FI = _T(_FI = _L);!_FI){如果(* _FI LT; * _K) _X = _K = _FI;  0;} 如果(_F = _X) 交换(* _F,* _X); }}/ *归并(一,左,右)T(N)动工(左LT,右)为O(1) 中期:=(左,右)/ 2,O(1) 归并(一,左,中),T(N / 2) 归并(1,中,右),T(N / 2) 合并(A,左,中,右); O(N)完* /合并无效(vectorlt; intgt;放大器; RDATA,nLeft,nMid INT nRight){ / /左= 0; / / MID = 3; / /右= 7; INT nLeftArrayLen =(nMid - nLeft)1; INT nRightArrayLen =(nRight - nMid); vectorlt; intgt; LeftArray,RightArray; LeftArray.resize(nLeftArrayLen); RightArray.resize(nRightArrayLen); vectorlt; intgt;:迭代itrFirst,itrLast; / /创建左子阵列... itrFirst = rData.begin()nLeft; itrLast = itrFirst nLeftArrayLen; 复制(itrFirst,itrLast,LeftArray.begin()); / /创建右子阵列...&# 160;itrFirst = rData.begin()nMid 1; itrLast = itrFirst nRightArrayLen; 副本(itrFirst,itrLast,RightArray.begin()); nLIndex = 0; nRIndex = 0; INT nCopyIndex = nLeft; (;(nCopyIndex LT = nRight放大器;放大器; nLIndex LT; nLeftArrayLen放大器;放大器; nRIndex LT; nRightArrayLen)){ (LeftArray nLIndex] <= RightArray [nRIndex]) RDATA [nCopyIndex] = LeftArray [nLIndex]; 其他 RDATA [nCopyIndex] = RightArray [nRIndex]; } / /左子数组复制到主阵列剩余的元素... ... (nCopyIndex LT = nRight放大器;放大器; nLIndex LT; nLeftArrayLen) RDATA [nCopyIndex] = LeftArray [nLIndex];  ;/ /右子数组复制到主阵列剩余的元素... ... (nCopyIndex LT = nRight放大器;放大器; nRightArrayLen) RDATA [nCopyIndex] = RightArray [nRIndex];}归并(vectorlt; intgt;放大器; RDATA,nLeft,INT nRight){ (nLeft LT; nRight){INT nMid =((nLeft nRight)/ 2); 归并(RDATA,nLeft,nMid); 归并(RDATA,nMid 1,nRight); 合并(RDATA,nLeft,nMid,nRight); } / /此Temlate优化版本仅适用于quot; vectorsquot任何本地和用户定义的数据类型/ /支持LT =,=(转让)运营商。/ /模板合并为载体...templatelt;类_type,类_IIgt;合并无效(_II _Left,_II _Mid,_II _Right){ / /左= 0; / / MID = 3; / /右= 7; 为size_t nLeftArrayLen =(_Mid - _Left)1; 为size_t nRightArrayLen =(_Right - _Mid); _type LeftArray,RightArray; LeftArray.resize(nLeftArrayLen); RightArray.resize(nRightArrayLen); _II itrFirst,itrLast; / /创建左子阵列... itrFirst = _Left; itrLast = itrFirst nLeftArrayLen; 复制(itrFirst,itrLast,LeftArray.begin()); / /创建右子阵列... itrFirst =(_Mid 1); itrLast = itrFirst nRightArrayLen; 复制(itrFirst,itrLast,RightArray.begin()); DWORD nLIndex = 0; DWORD nRIndex = 0; _II _CopyIndex = _Left; (LT nLIndex; nLeftArrayLen放大器;放大器; nRIndex LT; nRightArrayLen放大器;放大器; _CopyIndex LT = _Right){ (LeftArray nLIndex] <= RightArray [nRIndex]) * _CopyIndex = LeftArray [nLIndex]; 其他 * _CopyIndex = RightArray [nRIndex]; } / /左子数组复制到主阵列剩余的元素... ... (LT nLIndex; nLeftArrayLen放大器;放大器; _CopyIndex LT = _Right) * _CopyIndex = LeftArray [nLIndex]; / /右子数组复制到主阵列剩余的元素... ... (LT nRIndex; nRightArrayLen放大器;放大器; _CopyIndex LT = _Right) * _CopyIndex = RightArray [nRIndex];}/ /模板合并为向量排序...templatelt;类_type,类_IIgt;归并无效(_II _Left,_II _Right){ (_Left LT; _Right){ _II _Mid = _Left((_Right - _Left)/ 2); 0; MergeSortlt; _Typegt;(_Left,_Mid); MergeSortlt; _Typegt;(_Mid 1 _Right); Mergelt; _Typegt;(_Left,_Mid,_Right);&# 160;} }使用命名空间std;INT _tmain(INT ARGC,TCHAR * argv的[],TCHAR * envp是[]){ nRetCode = 0; / /初始化MFC并打印错误和失败 (AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0)) { / / TODO:更改错误代码以满足您的需求 cerr LT,LT; _T("致命错误:MFC初始化failedquot;)LT; 参考文献:

回答

评论会员:AlexWang 时间:2011/12/06
我没有看到自...菜单下的工具时加入addin.Does只为VC6.0工程
评论会员:?dandraka 时间:2011/12/06
您好,

有没有办法得到(真正有用的!)添加在工作与VB 6?

我试着加入:

BookMarkMgr.DSAddIn.1 = 3

到VBADDIN.INI,但它没有工作。

任何人吗?
评论会员:vithalklrk 时间:2011/12/06
这是一个非常可爱的插件。我唯一​​的抱怨是用于自动保存恢复文件的书面MSDEV路径。相反,如果是书面的项目路径,将是巨大的。
评论会员:feline_dracoform 时间:2011/12/06
本文离开我有很多问题,而不是有很多的答案
一个纯粹的实用方面,IDE的支持?是VS2005支持吗?针对这此只有在VC6中?

作为文章中,我希望看到一些讨论所涉及的代码,你如何做到这一点,等

禅是在一个two'ness
艺术