?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 各种排序法ȝ和比?南软g开发|׃软g开?南赢dU技软g开发公?/title> <meta name="keywords" content="各种排序法ȝ和比?/> <meta name="description" content="排序法可以说是一基本功Q解军_际问题中l常遇到Q针对实际数据的特点选择合适的排序法可以使程序获得更高的效率Q有时候排序的E_性还是实际问题中必须考虑的,q篇博客对常见的排序法q行整理Q包括:插入排序"/> <link href="/css/style.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> </head> <body> <div style="position:fixed;left:-9000px;top:-9000px;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <div class="head"> <div class="top"><span><a href="/html/sitemap.xml">XML</a> | <a href="/html/sitemap.html">HTML</a> | <a href="/sitemap.txt">TXT</a></span></div> <div class="bank"> <div class="logo"> <h1><strong><a href="http://www.themmauniversity.com" style="margin-right:10px">南软g开?/a></strong><strong><a href="http://www.themmauniversity.com">׃软g开?/a></strong></h1> </div> <div class="contact-top"></div> </div> <div class="menu"> <ul> <li><a href="/">?#160;   ?/a></li> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优?/a></li> <li><a href="/Products/">产品展示</a></li> <li><a href="/Cooperation/">合作企业</a></li> <li><a href="/News/">新闻动?/a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banner"><img src="/images/banner.jpg" width="1000" height="341"/></div> </div> <div id="position"><div>您当前位|:<a href="/">软g开?/a> >> <a href="/News/">新闻动?/a> >> <a href="/News/Technology/">软g开发技?/a> >> 览文章</div></div> <div class="youshi_f1" id="youshi_tdyx"> <div class="youshi01"> <h1 class="article_title">各种排序法ȝ和比?/h1> <div class="article_author">d旉Q?016-12-20 16:52:43 文章作者:<a href="/">南软g开?/a> 览ơ数Q?Script Language="Javascript" Src="/item/GetHits.asp?Action=Count&GetFlag=0&m=1&ID=3044"></Script></div> <div class="article_main"><div id="MyContent"><ul class=" list-paddingleft-2"><li><p>排序法可以说是一基本功Q解军_际问题中l常遇到Q针对实际数据的特点选择合适的排序法可以使程序获得更高的效率Q有时候排序的E_性还是实际问题中必须考虑的,q篇博客对常见的排序法q行整理Q包括:插入排序、选择排序、冒泡排序、快速排序、堆排序、归q排序、希排序、二叉树排序、计数排序、桶排序、基数排序?/p></li><li id="Article"><p> </p><p> </p><p> </p><p>      代码都经q了CodeBlocks的调试,但是很可能有没注意到的BUGQ欢q指出?/p><p> </p><p> </p><p> </p><p><strong style="margin: 0px; padding: 0px;">      比较排序和非比较排序</strong></p><p> </p><p>      常见的排序算法都是比较排序,非比较排序包括计数排序、桶排序和基数排序,非比较排序对数据有要求,因ؓ数据本n包含了定位特征,所有才能不通过比较来确定元素的位置?/p><p> </p><p>      比较排序的时间复杂度通常为O(n2)或者O(nlogn)Q比较排序的旉复杂度下界就是O(nlogn)Q而非比较排序的时间复杂度可以辑ֈO(n)Q但是都需要额外的I间开销?/p><p> </p><p>      比较排序旉复杂度ؓO(nlogn)的证明:</p><p> </p><p>      a1,a2,a3……an序列的所有排序有n!U,所以满求的排序a1',a2',a3'……an'Q其中a1'<=a2'<=a3'…?lt;=an'Q的概率?/n!。基于输入元素的比较排序Q每一ơ比较的q回不是0是1Q这恰好可以作ؓ决策树的一个决{将一个事件分成两个分支。比如冒泡排序时通过比较a1和a2两个数的大小可以把序列分成a1,a2……an与a2,a1……anQ气泡a2上升一个n位)两种不同的结果,因此比较排序也可以构造决{树。根节点代表原始序列a1,a2,a3……anQ所有叶子节炚w是这个序列的重排Q共有n!个,其中有一个就是我们排序的l果a1',a2',a3'……an'Q。如果每ơ比较的l果都是{概率的话(恰好划分为概率空间相{的两个事gQ,那么二叉树就是高度^衡的Q深度至是log(n!)?/p><p> </p><p>      又因?1. n! < nn ,两边取对数就得到log(n!)<nlog(n)Q所以log(n!) = O(nlogn).</p><p> </p><p>                2. n!=n(n-1)(n-2)(n-3)? > (n/2)^(n/2) 两边取对数得?log(n!) > (n/2)log(n/2) = Ω(nlogn)Q所?log(n!) = Ω(nlogn)?/p><p> </p><p>      因此log(n!)的增镉K度?nlogn 相同,?log(n!)=Θ(nlogn)Q这是通用排序法的最低时间复杂度O(nlogn)的依据?/p><p> </p><p> </p><p> </p><p><strong style="margin: 0px; padding: 0px;">      排序的稳定性和复杂?/strong></p><p> </p><p><strong style="margin: 0px; padding: 0px;">      不稳定:</strong></p><p> </p><p>      选择排序Qselection sortQ?O(n2)</p><p> </p><p>      快速排序(quicksortQ?O(nlogn) q_旉, O(n2) 最坏情? 对于大的、ؕ序串列一般认为是最快的已知排序</p><p> </p><p>      堆排?QheapsortQ?O(nlogn)</p><p> </p><p>      希尔排序 Qshell sortQ?O(nlogn)</p><p> </p><p>      基数排序Qradix sortQ?O(n·k); 需?O(n) 额外存储I间 QK为特征个敎ͼ</p><p> </p><p> </p><p> </p><p><strong style="margin: 0px; padding: 0px;">      E_Q?/strong></p><p> </p><p>      插入排序Qinsertion sortQ?O(n2)</p><p> </p><p>      冒排序Qbubble sortQ??O(n2)</p><p> </p><p>      归ƈ排序 Qmerge sortQ?O(n log n); 需?O(n) 额外存储I间</p><p> </p><p>      二叉树排序(Binary tree sortQ??O(nlogn); 需?O(n) 额外存储I间</p><p> </p><p>      计数排序  (counting sort) ?O(n+k); 需?O(n+k) 额外存储I间Qk为序列中Max-Min+1</p><p> </p><p>      桶排?Qbucket sortQ?O(n); 需?O(k) 额外存储I间</p><p> </p><p> </p><p> </p><p><strong style="margin: 0px; padding: 0px;">      每种排序的原理和实现</strong></p><p> </p><p><strong style="margin: 0px; padding: 0px;">      插入排序</strong></p><p> </p><p>      遍历数组Q遍历到iӞa0,a1...ai-1是已l排好序的,取出aiQ从ai-1开始向前和每个比较大小Q如果小于,则将此位|元素向后移动,l箋先前比较Q如果不于Q则攑ֈ正在比较的元素之后。可见相{元素比较是Q原来靠后的q是拍在后边Q所以插入排序是E_的?/p><p> </p><p>      当待排序的数据基本有序时Q插入排序的效率比较高,只需要进行很的数据Ud?/p><p> </p><p>复制代码</p><p>void insertion_sort (int a[], int n) {</p><p>    int i,j,v;</p><p>    for (i=1; i<n; i++) {</p><p>      //如果Wi个元素小于第j个,则第j个向后移?/p><p>        for (v=a[i], j=i-1; j>=0&&v<a[j]; j--)</p><p>            a[j+1]=a[j];</p><p>        a[j+1]=v;</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">      选择排序</strong></p><p> </p><p>      遍历数组Q遍历到iӞa0,a1...ai-1是已l排好序的,然后从i到n选择出最的Q记录下位置Q如果不是第i个,则和Wi个元素交换。此时第i个元素可能会排到相等元素之后Q造成排序的不E_?/p><p> </p><p>复制代码</p><p>void selection_sort (int a[], int n) {</p><p>    int i,j,pos,tmp;</p><p>    for (i=0; i<n-1; i++) {</p><p>      //L最值的下标</p><p>        for (pos=i, j=i+1; j<n; j++)</p><p>            if (a[pos]>a[j])</p><p>                pos=j;</p><p>        if (pos != i) {</p><p>            tmp=a[i];</p><p>            a[i]=a[pos];</p><p>            a[pos]=tmp;</p><p>        }</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">      冒排序</strong></p><p> </p><p>      冒排序的名字很形象Q实际实现是盔R两节点进行比较,大的向后UM个,l过W一轮两两比较和UdQ最大的元素UdC最后,W二轮次大的位于倒数W二个,依次q行。这是最基本的冒泡排序,q可以进行一些优化?/p><p> </p><p>      优化一Q如果某一轮两两比较中没有M元素交换Q这说明已经都排好序了,法l束Q可以用一个Flag做标讎ͼ默认为falseQ如果发生交互则|ؓtrueQ每轮结束时FlagQ如果ؓtrue则l,如果为false则返回?/p><p> </p><p>      优化二:某一轮结束位|ؓjQ但是这一轮的最后一ơ交换发生在lastSwap的位|,则lastSwap到j之间是排好序的,下一轮的l束点就不必是j--了,而直接到lastSwap卛_Q代码如下:</p><p> </p><p>复制代码</p><p>void bubble_sort (int a[], int n) {</p><p>    int i, j, lastSwap, tmp;</p><p>    for (j=n-1; j>0; j=lastSwap) {</p><p>        for (i=0; i<j; i++) {</p><p>            if (a[i] > a[i+1]) {</p><p>                tmp=a[i];</p><p>                a[i]=a[i+1];</p><p>                a[i+1]=tmp;</p><p>           //最后一ơ交换位|的坐标</p><p>                lastSwap = i;</p><p>            }</p><p>        }</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">      快速排?/strong></p><p> </p><p>      快速排序首先找C个基准,下面E序以第一个元素作为基准(pivotQ,然后先从叛_左搜索,如果发现比pivot,则和pivot交换Q然后从左向x索,如果发现比pivot大,则和pivot交换Q一直到左边大于双Q此时pivot左边的都比它,而右边的都比它大Q此时pivot的位|就是排好序后应该在的位|,此时pivot数l划分ؓ左右两部分,可以递归采用该方法进行。快排的交换使排序成ZE_的?/p><p> </p><p>复制代码</p><p>int mpartition(int a[], int l, int r) {</p><p>    int pivot = a[l];</p><p> </p><p>    while (l<r) {</p><p>        while (l<r && pivot<=a[r]) r--;</p><p>        if (l<r) a[l++]=a[r];</p><p>        while (l<r && pivot>=a[l]) l++;</p><p>        if (l<r) a[r--]=a[l];</p><p>    }</p><p>    a[l]=pivot;</p><p>    return l;</p><p>}</p><p> </p><p>void quick_sort (int a[], int l, int r) {</p><p> </p><p>    if (l < r) {</p><p>        int q = mpartition(a, l, r);</p><p>        msort(a, l, q-1);</p><p>        msort(a, q+1, r);</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">       堆排?/strong></p><p> </p><p>       堆排序是把数l看作堆Q第i个结点的孩子l点为第2*i+1?*i+2个结点(不超出数l长度前提下Q,堆排序的W一步是建堆Q然后是取堆元素然后调整堆。徏堆的q程是自底向上不断调整达成的Q这样当调整某个l点Ӟ其左节点和右l点已经是满x件的Q此时如果两个子l点不需要动Q则整个子树不需要动Q如果调_则父l点交换到子l点位置Q再以此l点l箋调整?/p><p> </p><p>      下述代码使用的大堆Q徏立好堆后堆顶元素为最大|此时取堆元素即使堆元素和最后一个元素交换,最大的元素处于数组最后,此时调整了一个长度的堆,然后再取堆顶和倒数W二个元素交换,依次cLQ完成数据的非递减排序?/p><p> </p><p>      堆排序的主要旉花在初始建堆期间Q徏好堆后,堆这U数据结构以及它奇妙的特征,使得扑ֈ数列中最大的数字q样的操作只需要O(1)的时间复杂度Q维护需要logn的时间复杂度。堆排序不适宜于记录数较少的文?/p><p> </p><p>复制代码</p><p>void heapAdjust(int a[], int i, int nLength)</p><p>{</p><p>    int nChild;</p><p>    int nTemp;</p><p>    for (nTemp = a[i]; 2 * i + 1 < nLength; i = nChild)</p><p>    {</p><p>        // 子结点的位置=2*Q父l点位置Q? 1</p><p>        nChild = 2 * i + 1;</p><p>        // 得到子结点中较大的结?/p><p>        if ( nChild < nLength-1 && a[nChild + 1] > a[nChild])</p><p>            ++nChild;</p><p>        // 如果较大的子l点大于父结炚w么把较大的子l点往上移动,替换它的父结?/p><p>        if (nTemp < a[nChild])</p><p>        {</p><p>            a[i] = a[nChild];</p><p>            a[nChild]= nTemp;</p><p>        }</p><p>        else</p><p>        // 否则退出@?/p><p>            break;</p><p>    }</p><p>}</p><p> </p><p>// 堆排序算?/p><p>void heap_sort(int a[],int length)</p><p>{</p><p>    int tmp;</p><p>    // 调整序列的前半部分元素,调整完之后第一个元素是序列的最大的元素</p><p>    //length/2-1是第一个非叶节点,此处"/"为整?/p><p>    for (int i = length / 2 - 1; i >= 0; --i)</p><p>        heapAdjust(a, i, length);</p><p>    // 从最后一个元素开始对序列q行调整Q不断的~小调整的范围直到第一个元?/p><p>    for (int i = length - 1; i > 0; --i)</p><p>    {</p><p>        // 把第一个元素和当前的最后一个元素交换,</p><p>        // 保证当前的最后一个位|的元素都是在现在的q个序列之中最大的</p><p>      ///  Swap(&a[0], &a[i]);</p><p>          tmp = a[i];</p><p>          a[i] = a[0];</p><p>          a[0] = tmp;</p><p>        // 不断~小调整heap的范_每一ơ调整完毕保证第一个元素是当前序列的最大?/p><p>        heapAdjust(a, 0, i);</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">       归ƈ排序</strong></p><p> </p><p>      归ƈ排序是采用分LQDivide and ConquerQ的一个非常典型的应用。首先考虑下如何将二个有序数列合q。这个非常简单,只要从比较二个数列的W一个数Q谁就先取谁,取了后就在对应数列中删除q个数。然后再q行比较Q如果有数列为空Q那直接另一个数列的数据依次取出卛_。这需要将待排序序列中的所有记录扫描一遍,因此耗费O(n)旉Q而由完全二叉树的深度可知Q整个归q排序需要进?logn.ơ,因此Qȝ旉复杂度ؓO(nlogn)?/p><p> </p><p>     归ƈ排序在归q过E中需 要与原始记录序列同样数量的存储空间存攑ֽq结果,因此I间复杂度ؓO(n)?/p><p> </p><p>     归ƈ法需要两两比较,不存在蟩跃,因此归ƈ排序是一U稳定的排序法?nbsp;</p><p> </p><p>复制代码</p><p>void mergearray(int a[], int first, int mid, int last, int temp[])</p><p>{</p><p>    int i = first, j = mid + 1;</p><p>    int m = mid,   n = last;</p><p>    int k = 0;</p><p> </p><p>    while (i <= m && j <= n)</p><p>    {</p><p>        if (a[i] <= a[j])</p><p>            temp[k++] = a[i++];</p><p>        else</p><p>            temp[k++] = a[j++];</p><p>    }</p><p> </p><p>    while (i <= m)</p><p>        temp[k++] = a[i++];</p><p> </p><p>    while (j <= n)</p><p>        temp[k++] = a[j++];</p><p> </p><p>    for (i = 0; i < k; i++)</p><p>        a[first + i] = temp[i];</p><p>}</p><p>void merge_sort(int a[], int first, int last, int temp[])</p><p>{</p><p>    if (first < last)</p><p>    {</p><p>        int mid = (first + last) / 2;</p><p>        merge_sort(a, first, mid, temp);    //左边有序</p><p>        merge_sort(a, mid + 1, last, temp); //双有序</p><p>        mergearray(a, first, mid, last, temp); //再将二个有序数列合ƈ</p><p>    }</p><p>}</p><p>复制代码</p><p>      有的地方看到在mergearray()合ƈ有序数列时分配时数l,x一步mergearray的结果存攄一个新的时数l里Q这样会在递归中消耗大量的I间。因此做出小的变化。只需要new一个时数l。后面的操作都共用这一个时数l。合q完后将临时数组中排好序的部分写回原数组?/p><p> </p><p>      归ƈ排序计算旉复杂度时可以很容易的列出递归方程Q也是计时间复杂度的一U方法?/p><p> </p><p><strong style="margin: 0px; padding: 0px;">      希尔排序</strong></p><p> </p><p>      希尔排序是对插入排序的优化,Z以下两个认识Q?. 数据量较时插入排序速度较快Q因为n和n2差距很小Q?. 数据基本有序时插入排序效率很高,因ؓ比较和移动的数据量少?/p><p> </p><p>      因此Q希排序的基本思想是将需要排序的序列划分成ؓ若干个较的子序列,对子序列q行插入排序Q通过则插入排序能够得原来序列成为基本有序。这样通过对较的序列q行插入排序Q然后对基本有序的数列进行插入排序,能够提高插入排序法的效率?/p><p> </p><p>      希尔排序的划分子序列不是像归q排序那U的二分Q而是采用的叫做增量的技术,例如有十个元素的数组q行希尔排序Q首先选择增量?0/2=5Q此时第1个元素和W(1+5Q个元素配对成子序列使用插入排序q行排序Q第2和(2+5Q个元素l成子序列,完成后增量l减半ؓ2Q此时第1个元素、第Q?+2Q、第Q?+4Q、第Q?+6Q、第Q?+8Q个元素l成子序列进行插入排序。这U增量选择Ҏ的好处是可以使数l整体均匀有序Q尽可能的减比较和Ud的次敎ͼ二分法中即前一半数据有序,后一半中如果有比较小的数据,q是会造成大量的比较和UdQ因此这U增量的Ҏ和插入排序的配合更佳?/p><p> </p><p>      希尔排序的时间复杂度和增量的选择{略有关Q上q增量方法造成希尔排序的不E_性?/p><p> </p><p> </p><p> </p><p>      <a href="javascript:;" onclick="showimg('http://982867735.p128878.sqnet.cn/UploadFiles/2016-12-20/201612205598099026.jpg');"><img src="http://982867735.p128878.sqnet.cn/UploadFiles/2016-12-20/201612205598099026.jpg" alt="各种排序法ȝ和比? onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p><p> </p><p>复制代码</p><p>void shell_sort(int a[], int n)</p><p>{</p><p>    int d, i, j, temp; //d为增?/p><p>    for(d = n/2;d >= 1;d = d/2) //增量递减?使完成排?/p><p>    {</p><p>        for(i = d; i < n;i++)   //插入排序的一?/p><p>        {</p><p>            temp = a[i];</p><p>            for(j = i - d;(j >= 0) && (a[j] > temp);j = j-d)</p><p>            {</p><p>                a[j + d] = a[j];</p><p>            }</p><p>        a[j + d] = temp;</p><p>        }</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">      二叉树排?/strong></p><p> </p><p>      二叉树排序法借助了数据结构二叉排序树Q二叉排序数满三个条gQ(1Q若左子树不I,则左子树上所有结点的值均于它的根结点的| Q?Q若叛_树不I,则右子树上所有结点的值均大于它的根结点的| Q?Q左、右子树也分别ؓ二叉排序树。根据这三个特点Q用中序遍历二叉树得到的l果是排序的结果?/p><p> </p><p>      二叉树排序法需要首先根据数据构Z叉排序树Q然后中序遍历,排序旉复杂度ؓO(nlogn)Q构Z叉树需要额外的O(n)的存储空_有相同的元素是可以设|排在后边的攑֜叛_树,在中序变量的时候也会在后边Q所以二叉树排序是稳定的?/p><p> </p><p>      在实现此法的时候遇C的困难Q指针参数在函数中无法通过new赋|后来采用取指针地址Q然后函数设|BST** tree的方式解冟?/p><p> </p><p>复制代码</p><p>int arr[] = {7, 8, 8, 9, 5, 16, 5, 3,56,21,34,15,42};</p><p> </p><p>struct BST{</p><p>    int number; //保存数组元素的?/p><p>    struct BST* left;</p><p>    struct BST* right;</p><p>};</p><p> </p><p>void insertBST(BST** tree, int v) {</p><p>    if (*tree == NULL) {</p><p>        *tree = new BST;</p><p>        (*tree)->left=(*tree)->right=NULL;</p><p>        (*tree)->number=v;</p><p>        return;</p><p>    }</p><p>    if (v < (*tree)->number)</p><p>        insertBST(&((*tree)->left), v);</p><p>    else</p><p>        insertBST(&((*tree)->right), v);</p><p>}</p><p> </p><p>void printResult(BST* tree) {</p><p>    if (tree == NULL)</p><p>        return;</p><p>    if (tree->left != NULL)</p><p>        printResult(tree->left);</p><p>    cout << tree->number << "  ";</p><p>    if (tree->right != NULL)</p><p>        printResult(tree->right);</p><p>}</p><p> </p><p>void createBST(BST** tree, int a[], int n) {</p><p>    *tree = NULL;</p><p>    for (int i=0; i<n; i++)</p><p>        insertBST(tree, a[i]);</p><p>}</p><p> </p><p>int main()</p><p>{</p><p>    int n = sizeof(arr)/sizeof(int);</p><p> </p><p>    BST* root;</p><p>    createBST(&root, arr, n);</p><p>    printResult(root);</p><p> </p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">       计数排序</strong></p><p> </p><p>      如果通过比较q行排序Q那么复杂度的下界是O(nlogn)Q但是如果数据本w有可以利用的特征,可以不通过比较q行排序Q就能旉复杂度降低到O(n)?/p><p> </p><p>      计数排序要求待排序的数组元素都是 整数Q有很多地方都要L0-K的正整数Q其实负整数也可以通过都加一个偏U量解决的?/p><p> </p><p>      计数排序的思想是,考虑待排序数l中的某一个元素aQ如果数l中比a的元素有s个,那么a在最l排好序的数l中的位|将会是s+1Q如何知道比a的元素有多个Q肯定不是通过比较去觉得,而是通过数字本n的属性,即篏加数l中最值到a之间的每个数字出现的ơ数Q未出现则ؓ0Q,而每个数字出现的ơ数可以通过扫描一遍数l获得?/p><p> </p><p>      计数排序的步骤:</p><p> </p><p>扑և待排序的数组中最大和最的元素Q计数数lC的长度ؓmax-min+1Q其中位|?存放minQ依ơ填充到最后一个位|存放maxQ?/p><p>l计数组中每个gؓi的元素出现的ơ数Q存入数lC的第i?/p><p>Ҏ有的计数累加Q从C中的W一个元素开始,每一和前一相加)</p><p>反向填充目标数组Q将每个元素i攑֜新数l的WC(i),每放一个元素就C(i)减去1Q反向填充是Z保证E_性)</p><p>      以下代码中寻找最大和最元素参考编E之,比较ơ数?.5nơ?/p><p> </p><p>      计数排序适合数据分布集中的排序,如果数据太分散,会造成I间的大量浪费,假设数据为(1,2,3,1000000Q,q就需?000000的额外空_q且有大量的I间费和时间浪贏V?/p><p> </p><p>复制代码</p><p>void findArrMaxMin(int a[], int size, int *min, int *max)</p><p>{</p><p>    if(size == 0) {</p><p>        return;</p><p>    }</p><p>    if(size == 1) {</p><p>        *min = *max = a[0];</p><p>        return;</p><p>    }</p><p> </p><p>    *min = a[0] > a[1] ? a[1] : a[0];</p><p>    *max = a[0] <= a[1] ? a[1] : a[0];</p><p> </p><p> </p><p>    int i, j;</p><p>    for(i = 2, j = 3; i < size, j < size; i += 2, j += 2) {</p><p>        int tempmax = a[i] >= a[j] ? a[i] : a[j];</p><p>        int tempmin = a[i] < a[j] ? a[i] : a[j];</p><p> </p><p>        if(tempmax > *max)</p><p>            *max = tempmax;</p><p>        if(tempmin < *min)</p><p>            *min = tempmin;</p><p>    }</p><p> </p><p>    //如果数组元素是奇CQ那么最后一个元素在分组的过E中没有包含其中Q?/p><p>    //q里单独比较</p><p>    if(size % 2 != 0) {</p><p>        if(a[size -1] > *max)</p><p>            *max = a[size - 1];</p><p>        else if(a[size -1] < *min)</p><p>            *min = a[size -1];</p><p>    }</p><p>}</p><p> </p><p>void count_sort(int a[], int b[], int n) {</p><p>    int max, min;</p><p>    findArrMaxMin(a, n, &min, &max);</p><p>    int numRange = max-min+1;</p><p>    int* counter = new int[numRange];</p><p> </p><p>    int i, j, k;</p><p>    for (k=0; k<numRange; k++)</p><p>        counter[k]=0;</p><p> </p><p>    for (i=0; i<n; i++)</p><p>        counter[a[i]-min]++;</p><p> </p><p>    for (k=1; k<numRange; k++)</p><p>        counter[k] += counter[k-1];</p><p> </p><p>    for (j=n-1; j>=0; j--) {</p><p>        int v = a[j];</p><p>        int index = counter[v-min]-1;</p><p>        b[index]=v;</p><p>        counter[v-min]--;</p><p>    }</p><p>}</p><p>复制代码<br style="margin: 0px; padding: 0px;"/> </p><p><strong style="margin: 0px; padding: 0px;">       桶排?/strong></p><p> </p><p>       假设有一l长度ؓN的待排关键字序列K[1....n]。首先将q个序列划分成M个的子区?? 。然后基于某U映函?Q将待排序列的关键字k映射到第i个桶?x数组B的下?i) Q那么该关键字k׃为B[i]中的元素(每个桶B[i]都是一l大ؓN/M的序?。接着Ҏ个桶B[i]中的所有元素进行比较排?可以使用快排)。然后依ơ枚举输出B[0]....B[M]中的全部内容x一个有序序列?/p><p> </p><p>      桶排序利用函数的映射关系Q减了计划所有的比较操作Q是一UHash的思想Q可以用在v量数据处理中?/p><p> </p><p>      我觉得计数排序也可以看作是桶排序的特例,数组关键字范围ؓNQ划分ؓN个桶?/p><p> </p><p><strong style="margin: 0px; padding: 0px;">      基数排序</strong></p><p> </p><p>      基数排序也可以看作一U桶排序Q不断的使用不同的标准对数据划分到桶中,最l实现有序。基数排序的思想是对数据选择多种基数Q对每一U基Cơ用桶排序?/p><p> </p><p>      基数排序的步骤:以整Cؓ例,整数按十进制位划分Q从低位到高位执行以下过E?/p><p> </p><p>      1. 从个位开始,Ҏ0~9的值将数据分到10个桶Ӟ例如12会划分到2h中?/p><p> </p><p>      2. ?~9?0个桶中的数据序攑֛到数l中?/p><p> </p><p>      重复上述q程Q一直到最高位?/p><p> </p><p>      上述ҎUCؓLSDQLeast significant digitalQ,q可以从高位C位,UCؓMSD?/p><p> </p><p>复制代码</p><p>int getNumInPos(int num,int pos) //获得某个数字的第pos位的?/p><p>{</p><p>    int temp = 1;</p><p>    for (int i = 0; i < pos - 1; i++)</p><p>        temp *= 10;</p><p> </p><p>    return (num / temp) % 10;</p><p>}</p><p> </p><p>#define RADIX_10 10    //十个Ӟ表示每一位的十个数字</p><p>#define KEYNUM 5     //整数位数</p><p>void radix_sort(int* pDataArray, int iDataNum)</p><p>{</p><p>    int *radixArrays[RADIX_10];    //分别?~9的序列空?/p><p>    for (int i = 0; i < RADIX_10; i++)</p><p>    {</p><p>        radixArrays[i] = new int[iDataNum];</p><p>        radixArrays[i][0] = 0;    //index?处记录这l数据的个数</p><p>    }</p><p> </p><p>    for (int pos = 1; pos <= KEYNUM; pos++)    //从个位开始到31?/p><p>    {</p><p>        for (int i = 0; i < iDataNum; i++)    //分配q程</p><p>        {</p><p>            int num = getNumInPos(pDataArray[i], pos);</p><p>            int index = ++radixArrays[num][0];</p><p>            radixArrays[num][index] = pDataArray[i];</p><p>        }</p><p> </p><p>        for (int i = 0, j =0; i < RADIX_10; i++) //写回到原数组中,复位radixArrays</p><p>        {</p><p>            for (int k = 1; k <= radixArrays[i][0]; k++)</p><p>                pDataArray[j++] = radixArrays[i][k];</p><p>            radixArrays[i][0] = 0;</p><p>        }</p><p>    }</p><p>}</p><p> </p></li></ul><p><br/></p></div> </div> </div> </div> <div class="clear"></div> <div class="foot"> <div class="foot_menu"> <ul> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优?/a></li> <li><a href="/Statement/">法律声明</a></li> <li><a href="/Remittance/">汇款方式</a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banquan"> 手机Q?8678812288 EQMail:1069706080@qq.com<br /> 地址Q山东省南市舜耕\泉城公园东门园内向北50c? 鲁ICP?7011972? 版权所?008Q?013 ׃赢d信息U技有限公司<script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "#/h.js%3F5fbc066dba9928a1e914c338c6945c98' type='text/javascript'%3E%3C/script%3E")); </script> </div> </div> <div style="position:fixed;left:-9000px;top:-9000px;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <a href="http://www.themmauniversity.com/">պƷһAV_aŷպƷ_Ů߳ڵѿ_ŷƷһһ</a> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body> </html>