真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么-創(chuàng)新互聯(lián)

本篇文章為大家展示了C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)擁有10年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),對(duì)于網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、重慶APP開發(fā)公司、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊(cè)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。

書接上文,上次講到了雙路快速排序,雙路快速排序是將等于v(標(biāo)志數(shù))的數(shù)也進(jìn)行交換,從而避免了在處理有大量重復(fù)數(shù)據(jù)的數(shù)組分組時(shí)的不平衡。而三路快速排序則是將等于v的數(shù)也分成一組,同樣可以解決上述問題。其原理如下:

1、采用隨機(jī)排序的方法將某個(gè)數(shù)作為分割數(shù),放在數(shù)組開頭,該數(shù)定義為v。將小于v的一段數(shù)組開頭的數(shù)索引定義為lt,將需要遍歷的數(shù)組的索引定義為i,將小于v的一段數(shù)組的索引定義為gt,數(shù)組的開頭和結(jié)尾的索引分別為lr。原理圖如下:

2、對(duì)索引i進(jìn)行維護(hù),逐個(gè)比較索引i對(duì)應(yīng)的數(shù)與v的關(guān)系。如果arr[i]i和lt分別向后移動(dòng)一位。如下圖藍(lán)色的e和灰綠色的那塊相交換

3、如果arr[i]=v,則將arr[i]納入等于v的那一部分,之后將索引i向后移動(dòng)一位

4、如果arr[i]>v,則將arr[i]與arr[gt-1]交換位置,之后將索引gt向前移動(dòng)一位,但是要注意,這時(shí),索引i不需要移動(dòng),因?yàn)榻粨Q過來的數(shù)不知道大小,下一步還需要接著判斷。

5、按照這個(gè)流程,gt會(huì)和i重合,則結(jié)束比較的過程

6、最后,不要忘了將arr[l]和arr[lt]交換位置,注意:這里交換位置的是arr[lt]。排序完成

代碼如下:

#ifndef QUICKSORT3_H#define QUICKSORT3_H//三路快速排序算法#include #include using namespace std;template void __QuickSort3way(T *arr,int l,int r){ //遞歸的終止條件 if (l>=r)  { return; } else { //隨機(jī)快速排序選取的隨機(jī)值,為了避免在整體大致有序的情況下產(chǎn)生分組不平衡現(xiàn)象,使算法退化 int RAND = (rand() % (r - l) + l); swap(arr[l], arr[RAND]); T v = arr[l]; //小于v的分組的初始索引 int lt = l; //大于v的分組的初始索引 int gt = r + 1; //等于v的分組的初始索引,并且,此索引是數(shù)組遍歷值的索引 int i = l + 1; while (iv)  {  //交換該數(shù)與大于v的第一個(gè)數(shù),但是在這里不需要維護(hù)i的索引  swap(arr[i], arr[gt - 1]);  gt--;  }  else//arr[i]==v  {  i++;//直接維護(hù)i的索引  } } //最后將數(shù)組第一個(gè)數(shù)v和小于v的最后一個(gè)數(shù)互換 swap(arr[l],arr[lt]); __QuickSort3way(arr,l,lt); __QuickSort3way(arr,gt,r); }}template void QuickSort3way(T *arr,int n){ __QuickSort3way(arr, 0, n - 1);}#endif // !QUICKSORT3_H

上述內(nèi)容就是C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站欄目:C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么-創(chuàng)新互聯(lián)
本文路徑:http://weahome.cn/article/ipjpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部