一些重要的排序演算法

2021-05-23 06:46:06 字數 2925 閱讀 6359

void

pigeonholesort(byte

*array,

intlength)

;int

i,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]);

returni;}

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)

一些重要的演算法

原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文 羅 列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的 很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法...

一些重要的演算法

酷殼 http coolshell.cn 原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好...

一些重要的演算法

下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法。注 本篇文章並非翻譯,其中的演算法描述大部份摘自wikipedia,因為維...