桶(箱子)排序
桶排序是基于链表的,相邻的桶之间和桶中相邻的元素之间皆用链表相连接,可以把它想象成一个矩阵。
用一个例子来说明桶排序。
假设有一个链表,其中的元素需要进行排序,元素为ABCDEFGHIJ,其值依次为2454304344,如A2->B4->C5->D4->E3->F0->G4->H3->I4->J4。若根据值进行排序。首先我们定义5个桶bin[5]用来装这10个元素,然后依次遍历每个元素,根据其值将其放入对应的桶中,及bin[0]=F,bin[1]=NULL,bin[2]=A,bin[3]={E,H,J},bin[4]={B,D,G,I},bin[5]=C。最后我们根据bin[0]~bin[5]桶的顺序重新排列元素,及FAEHJBDGIC。至此桶排序完成。
桶排序时需要先删除原先各个节点的后驱结点指针,然后再将各个节点分配至各个桶中,把每一个箱子中节点在用链表串联起来,再根据桶的顺序重新排列节点。
接下来是代码
void binSort(linklist<linknode> &chain, int range) {
linklist<linknode> *bin = new linklist<linknode>[range + 1];
int numberofelement = chain.size();
for (int i = 0; i < numberofelement; i++) {
linknode node = chain.