熱線(xian)電話:0755-23712116
郵(you)箱:contact@legoupos.cn
地址:深圳市寶安區沙井街道后亭茅洲山(shan)工業園工業大(da)廈全至科(ke)技創新園科(ke)創大(da)廈2層(ceng)2A
歸并排(pai)序(xu)(xu)(xu)(xu)是建立在歸并操作(zuo)上的(de)(de)(de)一(yi)(yi)種(zhong)有效(xiao)的(de)(de)(de)排(pai)序(xu)(xu)(xu)(xu)算法。該算法是采用(yong)分(fen)治法(Divide and Conquer)的(de)(de)(de)一(yi)(yi)個(ge)非常典型的(de)(de)(de)應(ying)用(yong)。將已有序(xu)(xu)(xu)(xu)的(de)(de)(de)子序(xu)(xu)(xu)(xu)列(lie)(lie)合并,得(de)到完全有序(xu)(xu)(xu)(xu)的(de)(de)(de)序(xu)(xu)(xu)(xu)列(lie)(lie);即(ji)先使每個(ge)子序(xu)(xu)(xu)(xu)列(lie)(lie)有序(xu)(xu)(xu)(xu),再使子序(xu)(xu)(xu)(xu)列(lie)(lie)段間有序(xu)(xu)(xu)(xu)。若將兩個(ge)有序(xu)(xu)(xu)(xu)表(biao)合并成一(yi)(yi)個(ge)有序(xu)(xu)(xu)(xu)表(biao),稱為2-路歸并。
歸(gui)并(bing)排(pai)序是(shi)一(yi)種穩定的(de)排(pai)序方法。和選(xuan)擇排(pai)序一(yi)樣,歸(gui)并(bing)排(pai)序的(de)性能不受輸入(ru)數(shu)據的(de)影響,但表現比選(xuan)擇排(pai)序好的(de)多,因(yin)為始終都是(shi)O(nlogn)的(de)時間復雜度。代(dai)價是(shi)需要(yao)額(e)外(wai)的(de)內(nei)存(cun)空間。
快速排(pai)序(xu)的(de)(de)基本思想(xiang):通過一趟排(pai)序(xu)將待排(pai)記(ji)(ji)錄(lu)分隔成獨立的(de)(de)兩部分,其中一部分記(ji)(ji)錄(lu)的(de)(de)關鍵(jian)字(zi)均(jun)比另一部分的(de)(de)關鍵(jian)字(zi)小,則可(ke)分別對這兩部分記(ji)(ji)錄(lu)繼續進行排(pai)序(xu),以達(da)到整個序(xu)列有序(xu)。
快速排序使用(yong)分治法來(lai)把一個(ge)串(list)分為兩個(ge)子串(sub-lists)。具體(ti)算法描述如下(xia):
堆(dui)排(pai)序(Heapsort)是(shi)指利用(yong)堆(dui)這種(zhong)數據(ju)結(jie)構(gou)所設(she)計的(de)一種(zhong)排(pai)序算法。堆(dui)積是(shi)一個近似(si)完全二(er)叉樹(shu)的(de)結(jie)構(gou),并同時滿足堆(dui)積的(de)性質(zhi):即子結(jie)點(dian)的(de)鍵值或索引(yin)總是(shi)小于(或者大于)它(ta)的(de)父節點(dian)。
計(ji)數(shu)排序不(bu)是基于比較的(de)排序算法,其核(he)心(xin)在(zai)于將(jiang)輸入的(de)數(shu)據值(zhi)轉化為鍵存儲(chu)在(zai)額外開辟的(de)數(shu)組空間中。 作為一種線性時間復雜度的(de)排序,計(ji)數(shu)排序要求輸入的(de)數(shu)據必須(xu)是有(you)確定范圍(wei)的(de)整數(shu)。
計數(shu)(shu)排(pai)(pai)序(xu)是(shi)(shi)一(yi)個(ge)穩定的(de)排(pai)(pai)序(xu)算(suan)法(fa)。當(dang)輸入的(de)元素是(shi)(shi) n 個(ge) 0到 k 之(zhi)間(jian)的(de)整(zheng)數(shu)(shu)時,時間(jian)復(fu)雜度是(shi)(shi)O(n+k),空(kong)間(jian)復(fu)雜度也是(shi)(shi)O(n+k),其排(pai)(pai)序(xu)速度快于任何比較(jiao)排(pai)(pai)序(xu)算(suan)法(fa)。當(dang)k不(bu)是(shi)(shi)很(hen)大并且序(xu)列(lie)比較(jiao)集(ji)中時,計數(shu)(shu)排(pai)(pai)序(xu)是(shi)(shi)一(yi)個(ge)很(hen)有效(xiao)的(de)排(pai)(pai)序(xu)算(suan)法(fa)。
桶(tong)排(pai)(pai)(pai)序(xu)(xu)是計(ji)數排(pai)(pai)(pai)序(xu)(xu)的升級版。它利用了(le)函數的映(ying)射關系,高(gao)效與(yu)否的關鍵就(jiu)在(zai)于(yu)這個映(ying)射函數的確定(ding)。桶(tong)排(pai)(pai)(pai)序(xu)(xu) (Bucket sort)的工作的原理:假設(she)輸入(ru)數據(ju)服從均勻分布(bu),將數據(ju)分到有(you)限(xian)數量的桶(tong)里,每個桶(tong)再分別排(pai)(pai)(pai)序(xu)(xu)(有(you)可能再使(shi)用別的排(pai)(pai)(pai)序(xu)(xu)算法或是以(yi)遞(di)歸方式繼續(xu)使(shi)用桶(tong)排(pai)(pai)(pai)序(xu)(xu)進行排(pai)(pai)(pai))。
桶(tong)排序最(zui)好情(qing)況(kuang)下使用(yong)線性時間(jian)O(n),桶(tong)排序的(de)時間(jian)復雜度(du)(du),取決與(yu)對各個桶(tong)之間(jian)數(shu)據(ju)進(jin)行排序的(de)時間(jian)復雜度(du)(du),因為(wei)其它部分(fen)的(de)時間(jian)復雜度(du)(du)都(dou)為(wei)O(n)。很顯然,桶(tong)劃分(fen)的(de)越小,各個桶(tong)之間(jian)的(de)數(shu)據(ju)越少,排序所(suo)用(yong)的(de)時間(jian)也會(hui)越少。但(dan)相(xiang)應的(de)空間(jian)消(xiao)耗就會(hui)增大。
基數排序(xu)(xu)(xu)是(shi)按(an)照(zhao)(zhao)低(di)位(wei)先(xian)排序(xu)(xu)(xu),然(ran)后(hou)收集;再按(an)照(zhao)(zhao)高(gao)(gao)位(wei)排序(xu)(xu)(xu),然(ran)后(hou)再收集;依次(ci)類推,直到最(zui)高(gao)(gao)位(wei)。有時候(hou)有些屬性是(shi)有優(you)先(xian)級(ji)順序(xu)(xu)(xu)的,先(xian)按(an)低(di)優(you)先(xian)級(ji)排序(xu)(xu)(xu),再按(an)高(gao)(gao)優(you)先(xian)級(ji)排序(xu)(xu)(xu)。最(zui)后(hou)的次(ci)序(xu)(xu)(xu)就(jiu)是(shi)高(gao)(gao)優(you)先(xian)級(ji)高(gao)(gao)的在前,高(gao)(gao)優(you)先(xian)級(ji)相同的低(di)優(you)先(xian)級(ji)高(gao)(gao)的在前。
基數(shu)(shu)排(pai)序基于(yu)分(fen)別排(pai)序,分(fen)別收集,所以是(shi)穩定的。但基數(shu)(shu)排(pai)序的性(xing)能比桶(tong)排(pai)序要略(lve)差,每一次關(guan)鍵字的桶(tong)分(fen)配都需(xu)要O(n)的時間(jian)復雜(za)度,而且分(fen)配之后得到新的關(guan)鍵字序列(lie)又需(xu)要O(n)的時間(jian)復雜(za)度。假如待(dai)排(pai)數(shu)(shu)據可以分(fen)為d個關(guan)鍵字,則基數(shu)(shu)排(pai)序的時間(jian)復雜(za)度將是(shi)O(d*2n) ,當然d要遠遠小于(yu)n,因此基本(ben)上還是(shi)線(xian)性(xing)級別的。
基數排序的空(kong)(kong)間(jian)復雜度為O(n+k),其中k為桶的數量(liang)。一般(ban)來說(shuo)n>>k,因(yin)此額(e)外空(kong)(kong)間(jian)需(xu)要大概n個左右。