桶排序 -
實現線性排序,但當元素間值得大小有較大差距時會帶來內存空間的較大浪費。首先,找出待排序列中得最大元素max,申請內存大小爲max + 1的桶(數組)並初始化爲0;然後,遍歷排序數列,並依次將每個元素作爲下標的桶元素值自增1;最後,遍歷桶元素,並依次將值非0的元素下標值載入排序數列(桶元素>1表明有值大小相等的元素,此時依次將他們載入排序數列),遍歷完成,排序數列便爲有序數列。
時間複雜度:O(x*N) 穩定性:穩定
/*桶排序*/
void bucketSort(vector<int> &arr)
{
int max = getMaxValue(arr);
int *pBuf = new int[max + 1];
memset(pBuf, 0, (max + 1)*sizeof(int));
for (auto const i : arr)
++pBuf[i];
for (int i = 0, j = 0; i <= max; ++i)
{
while (pBuf[i]--)
arr[j++] = i;
}
delete []pBuf;
}