亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#遞歸算法之快速排序

2020-01-24 01:06:13
字體:
來源:轉載
供稿:網友

上兩片第歸算法學習:

1)遞歸算法之分而治之策略
2)遞歸算法之歸并排序

  上一篇學習中介紹了了遞歸算法在排序中的一個應用:歸并排序,在排序算法中還有一種算法用到了遞歸,那就是快速排序,快速排序也是一種利用了分而治之策略的算法,它由C.A.R發明,它依據中心元素的值,利用一系列遞歸調用將數據表劃分成越來越小的子表。在每一步調用中,經過多次的交換,最終為中心元素找到最終的位置。與歸并算法不同,快速排序是就地排序,而歸并排序需要把元素在臨時向量中拷貝,下面通過對以下向量進行排序來理解和加深快速排序算法的步驟:

v={800,150,300,650,550,500,400,350,450,400,900};

  利用快速排序算法對此數據表進行排序的第0級劃分過程如下: 向量v的索引范圍為:[first,last) = [0,10),則中心點的索引為mid = (0+10)/2=5,中心點的值為v[5] = 500

  快速排序算法的第一次劃分的目的就是將向量v依據v[5]的值劃分成兩個子表subList1和subList2,其中subList1中的值都小于v[5],而subList2中的值都大于v[5],我們將subList1稱為左子表,subList2稱為右子表,并且確定v[5]的最終位置

下面就是實現這一目的需要我們作出的工作步驟:

1)首先將中心元素與起始位置的元素進行交換。

2)分別掃描左子表和右子表,左子表掃描起始位置為 first+1, 右子表從last-1開始。左子表從左向右掃描掃描,右子表從右向左掃描。直到左子表掃描位置大于或者等于右子表掃描位置時候結束。

在第一個步驟中,得到如下的數據表

500  150  300 650 550 800 400 350 450 400 

http://files.VeVB.COm/file_images/article/201606/201606160900294.png

  而此時的左子表掃描位置處于索引1處,右子表掃描位置處于索引9處,先從左子表掃描,直到找到數據值大于中間值500的位置停止掃描,然后掃描右子表,直到找到數據值小于中間值500并且右子表的掃描位置(scanDown)要小于左子表開始位置,防止數據溢出。找到之后,交換左子表與右子表中中掃描位置的元素,圖示如下:

http://files.VeVB.COm/file_images/article/201606/201606160900295.png

在交換v[3](650>500)與v[8](450<500)后,繼續掃描左子表和右子表,如圖

http://files.VeVB.COm/file_images/article/201606/201606160900296.png

  直到滿足條件scanUp>=scanDown,然后scanDown所在位置就是中心元素500的最終位置,交換v[0]與v[scanDown)=v[5],第一次劃分級別的最終結果數據集為:400,150,300,450,350,500,800,550,650,900,此時得到的左子表為:400,150,300,450,350,右子表為:800,550,650,900

  下一個劃分級別是處理上一級別產生的子表,按照相同的處理方法分別處理左子表和右子表,左子表索引位置[0,5),右子表索引位置[6,10),按照上面的處理步驟處理左子表(400,150,300,450,350)得到的最終結果為:150,300,400,450,350 右子表最終處理結果為:550,650,800,900 在處理結果中300與650分別是中心值,他們現在的位置就是最終位置

  在接下來的處理中,總是處理上一步驟中留下的子表,當子表數目<=1的時候就不用處理子表了,而子表有兩個元素的時候,比較大小,然后交換兩元素位置即可。

大于2個元素的子表都和上面的處理步驟一樣,我們將上面的處理過程編寫出一個函數

private int PivotIndex(int[] v, int first, int last),那么快速排序算法就是對此函數的遞歸調用

/// <summary>/// 交換位置/// </summary>/// <param name="v"></param>/// <param name="index1"></param>/// <param name="index2"></param>private void Swrap(int[] v, int index1, int index2){ int temp = v[index1]; v[index1] = v[index2]; v[index2] = temp;}/// <summary>/// 將向量V中索引{first,last)劃分成兩個左子表和右子表/// </summary>/// <param name="v">向量V</param>/// <param name="first">開始位置</param>/// <param name="last">結束位置</param>private int PivotIndex(int[] v, int first, int last){ if (last == first) {  return last; } if (last - first == 1) {  return first; } int mid = (first + last) / 2; int midVal = v[mid]; //交換v[first]和v[mid] Swrap(v, first, mid); int scanA = first + 1; int scanB = last - 1; for (; ; ) {   while (scanA <= scanB && v[scanA] < midVal)  {   scanA++;  }  while (scanB > first && midVal <= v[scanB])  {   scanB--;  }  if (scanA >= scanB)  {   break;  }  Swrap(v, scanA, scanB);  scanA++;  scanB--; } Swrap(v, first, scanB); return scanB; }public void Sort(int[] v, int first, int last){ if (last - first <= 1) {  return; } if (last - first == 2) {  //有兩個元素的子表  if (v[first] > v[last - 1])  {   Swrap(v, first, last - 1);  }  return; } else {  int pivotIndex = PivotIndex(v, first, last);  Sort(v, first, pivotIndex);  Sort(v, pivotIndex + 1, last); }} 

  快速排序因為每次劃分都能將中心值元素找到最終的位置,并且左邊值都小于中心值,右邊都大于中心值,它的時間復雜度平均和歸并算法一致為O(nlog2n);

  任何一種基于比較的排序算法的時間復雜度不可能小于這個數,除非不使用比較的方法進行排序。

算法程序:http://xiazai.VeVB.COm/201606/yuanma/QuickSort(VeVB.COm).rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人亚洲精品| 一区二区三区国产视频| 2019亚洲男人天堂| 成人h猎奇视频网站| 国产色婷婷国产综合在线理论片a| 日韩欧美精品网址| 亚洲欧洲一区二区三区在线观看| 久久国产视频网站| 日韩精品在线免费| 成人动漫网站在线观看| 久久久久亚洲精品成人网小说| 色偷偷偷综合中文字幕;dd| 色综合久综合久久综合久鬼88| 97成人精品视频在线观看| 亚洲精品永久免费| 日韩精品小视频| 欧美日韩在线免费观看| 久久久999国产精品| 国产精品自拍偷拍视频| 91香蕉国产在线观看| 国产精品一区二区女厕厕| 国产不卡av在线免费观看| 在线电影中文日韩| 日韩极品精品视频免费观看| 91精品国产综合久久香蕉最新版| 久久久精品国产亚洲| 亚洲最大的网站| 国产精品久久久久久久天堂| 51久久精品夜色国产麻豆| 色综合久久88| 日韩av在线网| 久久久免费电影| 国产欧美一区二区三区久久人妖| 精品网站999www| 97福利一区二区| 欧美日韩国产丝袜另类| 91精品国产91久久久久久| 亚洲a区在线视频| 中文字幕精品一区久久久久| 欧美视频一区二区三区…| 成人亚洲欧美一区二区三区| 久久久免费精品| 国产精品视频专区| 成人中心免费视频| 亚洲三级黄色在线观看| 成人免费网站在线看| 精品久久香蕉国产线看观看亚洲| 另类美女黄大片| 欧美亚洲日本黄色| 精品久久久久久久久久久| 日韩中文有码在线视频| 亚洲一区av在线播放| 亚洲精品资源美女情侣酒店| 亚洲毛片在线观看.| 亚洲国产欧美一区二区丝袜黑人| 欧美性猛交xxxx乱大交| 久久免费精品日本久久中文字幕| 久久久噜久噜久久综合| 欧美激情综合色| 国产中文字幕日韩| 在线精品国产成人综合| 亚洲大尺度美女在线| 九九九久久国产免费| 亚洲欧洲偷拍精品| 欧美亚洲一级片| 欧美韩日一区二区| 精品国产视频在线| 欧美俄罗斯乱妇| 国产亚洲精品久久久久动| 欧美福利小视频| 日韩中文字幕网址| 黑人巨大精品欧美一区二区| 国产精品久久999| 97在线免费观看视频| 91精品国产91久久久久久| 欧美日韩日本国产| 欧美一级在线亚洲天堂| 日韩成人在线观看| 高潮白浆女日韩av免费看| 精品国产成人在线| 久久久97精品| 欧美在线亚洲一区| 亚洲精品国产电影| 亚洲第一区中文99精品| 久久久之久亚州精品露出| 97av视频在线| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲一区久久久| 97在线视频观看| 久久精品视频网站| 亚洲视频国产视频| 亚洲欧美国产精品久久久久久久| 久久999免费视频| 国产日韩综合一区二区性色av| 91精品国产成人www| 亚洲欧洲免费视频| 成人动漫网站在线观看| 欧洲成人在线观看| 欧美重口另类videos人妖| 亚洲人成电影网| 国产一区在线播放| 国产精品视频在线观看| 亚洲精品理论电影| 成人黄色在线免费| 成人免费自拍视频| 亚洲国产毛片完整版| 日韩有码在线观看| 最近免费中文字幕视频2019| 久久精品91久久香蕉加勒比| 亚洲欧美国产制服动漫| 欧美中文在线字幕| 在线播放国产一区中文字幕剧情欧美| 日韩女优人人人人射在线视频| 成人精品久久久| 国产综合色香蕉精品| 91中文在线视频| 色婷婷**av毛片一区| 亚洲影院在线看| 欧美激情视频网站| 国产精品自产拍在线观看| 午夜精品99久久免费| www高清在线视频日韩欧美| 日韩免费av在线| 成人高清视频观看www| 欧美成人亚洲成人日韩成人| 亚洲色图欧美制服丝袜另类第一页| 91在线视频导航| zzijzzij亚洲日本成熟少妇| 国产网站欧美日韩免费精品在线观看| 在线视频日韩精品| 91久久精品久久国产性色也91| 国产视频精品免费播放| 欧美极品少妇xxxxⅹ喷水| 日韩av最新在线观看| 91精品国产91久久久久久最新| 欧美激情一级精品国产| 91精品视频在线| 91在线视频导航| 色阁综合伊人av| 亚洲最大成人网色| 亚洲欧美另类在线观看| 久久久久99精品久久久久| 亚洲午夜激情免费视频| 精品久久久久久久久中文字幕| 欧美在线国产精品| 久久精品成人动漫| 自拍偷拍亚洲精品| 国产精品第七影院| 亚洲国产精品久久精品怡红院| 午夜精品福利在线观看| 日韩电影在线观看免费| 久久久久99精品久久久久| 国产精品r级在线| 国产精品久久久久久婷婷天堂| 国产91网红主播在线观看| 欧美日韩中文字幕在线视频| 欧美日韩国产综合新一区| 中文字幕免费精品一区高清| 91精品国产色综合久久不卡98| 日韩午夜在线视频| 国产在线观看精品一区二区三区| 欧美日韩中文在线| 亚洲一区二区福利| 日韩久久免费电影|