幾個高速排序演算法

2021-05-23 16:38:00 字數 3095 閱讀 7740

鴿巢排序,排序位元組串、寬位元組串最快的排序演算法,計數排序的變種(將計數緩衝區大小固定,少一次遍歷開銷),速度是stl中std::sort的20多倍,更重要的是實現極其簡單!缺點是需要乙個size至少等於待排序陣列取值範圍的緩衝區,不適合int等大範圍資料

c/c++ code

void

pigeonholesort(byte

*array,

intlength)

;

inti,k,j =0

;for(i=

0; i

<

length; i++)

b[array[i]]++;

for(i=0

; i<

256; i++)

for(k=0

; k<

b[i]; k++)

array[j

++] =i;

}

多一次遍歷的計數排序,排序位元組串的話速度約是鴿巢排序的一半

c/c++ code

void

countingsort(byte

*array,

intlength)

count =(

int*

)malloc((max

-min+1

)*

sizeof

(int

));for(i=

0; i

<

max-

min+

1; i++)

count[i] =0

;for

(i =

0; i

<

length; i++)

count[array[i]

-min]++;

for(t =0

; t

<=

255; t++)

for(i =0

; i

<

count[t

-min]; i++)

array[z

++]

=(byte)t;

free(count);

}

快速排序,快排最標準的遞迴實現,速度約是std::sort的一半

c/c++ code

void

swap(byte

*a,byte *b)

} int

partition(byte

*arr,

intleft,

intright)

swap(

&arr[i],

&arr[right]);

return

i;} void

quicksort(byte

*arr,

intleft,

intright)

} void

quicksort(byte

*array,

intlength)

這是速度與std::sort相當的三路劃分快排

c/c++ code

void

swap(byte

*a,byte *b)

} void

quicksort(byte

*arr,

intleft,

intright)

if(arr[j]

==v)

}swap(

&arr[i],

&arr[right]);j =

i -1;

i++

;for(k=

left; k

<=

p; k

++,j--)

swap(

&arr[k],

&arr[j]);

for(k

=right-1

; k>=

q; k

--,i++)

swap(

&arr[k],

&arr[i]);

quicksort(arr,left,j);

quicksort(arr,i,right);

}} void

quicksort(byte

*array,

intlength)

相當簡單的梳排序,效率是std::sort的三分之一

c/c++ code

void

combsort(byte

*arr,

intsize)

++i;}}

}

lsd基數排序,與std::sort速度相當,但是需要乙個與輸入緩衝一樣大的緩衝區

c/c++ code

#define

r 256

#define

digit(a, d) ( a >> 8*d )

static

byte

*aux;

void

radix_sort(byte

*arr,

intleft,

intright)

}} void

radixsort(byte

*array,

intlength)

歸併排序,效率越是std::sort的六分之一,通常的實現是遞迴,但和快排不同,歸併改迴圈極其容易

c/c++ code

void

merge(byte

*array,

intlow,

intmid,

inthigh)

void

merge_sort(byte

*array, uint first, uint last)

void

mergesort(byte

*array, uint length)

高速排序 與 隨機高速排序 演算法分析

高速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則須要 n2 次比較,但這樣的狀況並不常見。其實,高速排序通常明顯比其它 n log n 演算法更快,由於它的內部迴圈 inner loop 能夠在大部分的架構上非常有效率地被實現出來...

C 高速排序演算法

根據網上看到的高速排序演算法介紹,進行的 實現。目前的 還是比較粗糙和繁瑣的,等待後續改進 下面的文字介紹部分 於 一 高速排序演算法的基本特性 時間複雜度 o nlgn 最壞 o n 2 空間複雜度 o nlgn 不穩定。高速排序是一種排序演算法,對包括n個數的輸入陣列,平均時間為o nlgn 最...

高速排序演算法C 實現

quick sort stl中也有現成的高速排序演算法。內部實現採用了下面技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 高速排序與插入排序結合 include include includeusing namespace std 這一版本號是最簡單實現版本號。對於高速排序...