久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

立即注冊 登錄
返回首頁

uid:90034的個人空間

日志

快速排序

已有 506 次閱讀2015-9-13 19:36

今天介紹快速排序,這也是在實際中最常用的一種排序算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序算法。

思想

快速排序采用的思想是分治思想。

快速排序是找出一個元素(理論上可以隨便找一個)作為基準(pivot),然后對數組進行分區操作,使基準左邊元素的值都不大于基準值,基準右邊的元素值 都不小于基準值,如此作為基準的元素調整到排序后的正確位置。遞歸快速排序,將其他n-1個元素也調整到排序后的正確位置。最后每個元素都是在排序后的正 確位置,排序完成。所以快速排序算法的核心算法是分區操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞歸。

舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為

2 2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指針分別從兩邊進行掃描,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移

2 2 4 9 3 6 7 1 5 比較2和1,1小于2,所以把1放在2的位置

2 1 4 9 3 6 7 1 5 比較2和4,4大于2,因此將4移動到后面

2 1 4 9 3 6 7 4 5 比較2和7,2和6,2和3,2和9,全部大于2,滿足條件,因此不變

經過第一輪的快速排序,元素變為下面的樣子

[1] 2 [4 9 3 6 7 5]

之后,在把2左邊的元素進行快排,由于只有一個元素,因此快排結束。右邊進行快排,遞歸進行,最終生成最后的結果。

代碼

復制代碼
int quicksort(vector<int> &v, int left, int right){
if(left < right){
int key = v[left];
int low = left;
int high = right;
while(low < high){
while(low < high && v[high] > key){
high--;
}
v[low] = v[high];
while(low < high && v[low] < key){
low++;
}
v[high] = v[low];
}
v[low] = key;
quicksort(v,left,low-1);
quicksort(v,low+1,right);
}
}
復制代碼


分析

快速排序的時間主要耗費在劃分操作上,對長度為k的區間進行劃分,共需k-1次關鍵字的比較。

最壞情況是每次劃分選取的基準都是當前無序區中關鍵字最小(或最大)的記錄,劃分的結果是基準左邊的子區間為空(或右邊的子區間為空),而劃分所得的另一個非空的子區間中記錄數目,僅僅比劃分前的無序區中記錄個數減少一個。時間復雜度為O(n*n)

在最好情況下,每次劃分所取的基準都是當前無序區的"中值"記錄,劃分的結果是基準的左、右兩個無序子區間的長度大致相等。總的關鍵字比較次數:O(nlgn)

盡管快速排序的最壞時間為O(n2),但就平均性能而言,它是基于關鍵字比較的內部排序算法中速度最快者,快速排序亦因此而得名。它的平均時間復雜度為O(nlgn)。


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

返回頂部
主站蜘蛛池模板: 国产第一页在线播放 | 欧美精品在线播放 | 亚洲人成人一区二区在线观看 | 91资源在线 | 日韩精品一区二区三区 | 在线视频日韩精品 | 国产精品123区 | 黄色国产视频 | 888久久久 | 夜夜草| 亚洲三级在线观看 | 国产美女视频一区 | 国产美女黄色片 | 亚洲综合在线视频 | 欧美一级电影免费观看 | 成人在线视频网站 | 韩日一区二区 | 国产一区成人 | 亚洲综合婷婷 | 国产成人免费视频 | 欧美中文字幕一区二区 | 日韩精品在线观看一区二区三区 | 欧美黄 片免费观看 | 亚洲国产成人在线视频 | 久久久久se | 精品国产一区探花在线观看 | 成人久久18免费 | 国产精品久久久一区二区三区 | 久青草影院 | 免费在线一区二区三区 | 精品一区二区三区在线观看国产 | 国产精品色 | 久久久精品网站 | 免费在线观看成人 | 成人性生交大免费 | 日韩中文在线 | 国产亚洲一级 | 亚洲国产一区在线 | 国产精品区一区二区三区 | 国产高潮好爽受不了了夜夜做 | av一区在线观看 |