鴿巢排序,排序位元組串、寬位元組串最快的排序演算法,計數排序的變種(將計數緩衝區大小固定,少一次遍歷開銷),速度是stl中std::sort的20多倍,更重要的是實現極其簡單!缺點是需要乙個size至少等於待排序陣列取值範圍的緩衝區,不適合int等大範圍資料
c/c++ code
voidpigeonholesort(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
voidcountingsort(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
voidswap(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
voidswap(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
voidcombsort(byte
*arr,
intsize)
++i;}}
}
lsd基數排序,與std::sort速度相當,但是需要乙個與輸入緩衝一樣大的緩衝區
c/c++ code
#definer 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
voidmerge(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 這一版本號是最簡單實現版本號。對於高速排序...