成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么

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

我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都網(wǎng)站制作、成都做網(wǎng)站服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,成都創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),小程序制作,網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。

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

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

2、對(duì)索引i進(jìn)行維護(hù),逐個(gè)比較索引i對(duì)應(yīng)的數(shù)與v的關(guān)系。如果arr[i]<v,那么將arr[i]和arr[lt+1]交換,之后將索引ilt分別向后移動(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過(guò)來(lái)的數(shù)不知道大小,下一步還需要接著判斷。

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

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

代碼如下:

#ifndef QUICKSORT3_H#define QUICKSORT3_H//三路快速排序算法#include <iostream> #include <stdlib.h>using namespace std;template <typename T>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 (i<gt) {  //如果遍歷的數(shù)據(jù)小于v  if (arr[i]<v)  {  //將該數(shù)組與第一個(gè)等于v的數(shù)據(jù)交換  swap(arr[lt + 1], arr[i]);  //維護(hù)小于v的索引和待遍歷的數(shù)據(jù)的索引  lt++;  i++;  }  //如果數(shù)據(jù)大于v  else if (arr[i]>v)  {  //交換該數(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 <typename T>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è)資訊頻道。

當(dāng)前標(biāo)題:C/C++實(shí)現(xiàn)三路快速排序算法的原理是什么
URL網(wǎng)址:http://jinyejixie.com/article40/psiieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、用戶體驗(yàn)、定制開(kāi)發(fā)標(biāo)簽優(yōu)化、、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
肥东县| 徐州市| 潮安县| 阿巴嘎旗| 应城市| 东至县| 嘉义县| 四平市| 通江县| 盐山县| 南昌市| 丰都县| 平塘县| 金塔县| 林周县| 四川省| 沈丘县| 信丰县| 无锡市| 南投市| 锦屏县| 宝丰县| 黄骅市| 宜君县| 双辽市| 盈江县| 建湖县| 弥渡县| 辽阳市| 罗江县| 满洲里市| 鹤庆县| 牡丹江市| 贵阳市| 科技| 梧州市| 酉阳| 定襄县| 宣城市| 高青县| 新田县|