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,因為維...