先說下桶排序的原理,其實就是先構造乙個空的陣列,所有元素初始化為0。然後待排序陣列進行遍歷,把該元素的值在對應桶的陣列的下標的位置的元素的值加一,就可以完成排序。
對於桶排序的弊端很嚴重,比如我們待排序的陣列有重複元素和負數那他的時間複雜度都為o(m+n),當資料足夠多的時候我們的系統是承受不了的,但對於沒有重複元素,也沒有負數,那它的時間複雜度為o(n),這個時間是在我們接受的範圍內。所以說,具體針對桶排序的應用請依據實際情況進行選擇。
本**演示的是正負數以及重複的整數的排序
#include #define bucketsize 999 //設定桶的大小,這裡接受最大的數為999-1
//對桶進行初始化
void initbucket(int *bucketarray)
} //桶式排序, 排序前陣列, 陣列長度
void bucksort(int *beforearray, int len)
} else
}} int ptr = 0;
for(int j = tmpbyneg; j >= 0; j--)
else if(bucketarraybyneg[j] > 1)
}} for(int j = 0; j <= tmpbypos; j++)
else if(bucketarraybypos[j] > 1)
} }}
int main(void)
; int len = sizeof(beforearray)/sizeof(beforearray[0]);
bucksort(beforearray, len);
for(int i = 0; i < len; i++)
printf("\n");
return 0;
}
排序 桶排序(Bucket sort)
桶排序是將待排序集合中處於同乙個值域的元素存入同乙個桶中,也就是根據元素值特性將集合拆分為多個區域,則拆分後形成的多個桶,從值域上看是處於有序狀態的。對每個桶中元素進行排序,則所有桶中元素構成的集合是已排序的。桶排序的思想近乎徹底的分治思想。演算法的過程描述如下 根據待排序集合中最大元素和最小元素的...
小白必學排序演算法(七) 桶排序
桶排序是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。理解 桶排序是計數排序的變種,把計數排序中相鄰的m個 小桶 放到乙個 大桶 中,在分完桶後,對每個桶進行排序 一般用快排 然後合併成最後的結果。桶排序是穩定演算法。基本思想 桶排序的思想近乎徹底的分治思想。效...
經典排序演算法 桶排序Bucket sort
經典排序演算法 桶排序bucket sort 補充說明三點 1,桶排序是穩定的 2,桶排序是常見排序裡最快的一種,比快排還要快 大多數情況下 3,桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法 我自己的理解哈,可能與網上說的有一些出入,大體都是同樣的原理 無序陣列有個要求,就是...