排序算法的数组实现 -- 桶排序(五)

来源:互联网 发布:免费二级解释域名 编辑:程序博客网 时间:2024/06/06 22:16

//桶排序,假设对范围为0-99之间的int型数值进行排序,分成10个相同区间的桶

//这里用到了链表的排序算法,可以从单链表的排序(一)找到相应算法

void Insert_sort_Swap_Node(EleLink *old_froMax_Node, EleLink *old_Max_Node,EleLink *froMax_Node, EleLink *Max_Node){EleLink *tmp = Max_Node->pnext;if(old_Max_Node->pnext == Max_Node){old_froMax_Node->pnext = Max_Node;Max_Node->pnext = old_Max_Node;old_Max_Node->pnext = tmp;}else{old_froMax_Node->pnext = Max_Node;Max_Node->pnext = old_Max_Node->pnext;froMax_Node->pnext = old_Max_Node;old_Max_Node->pnext = tmp;}}void Link_Insert_Sort(EleLink *pNode){if(!pNode || !pNode->pnext)return;EleLink *p = pNode->pnext;int ncount = 0;while (p){ncount++;p = p->pnext;}p = pNode;EleLink *fro_Node, *froMax_Node;EleLink *cur_Node, *Max_Node;for (int i = 0; i < ncount - 1; i++){froMax_Node = p;Max_Node = p->pnext;fro_Node = p->pnext;cur_Node = fro_Node->pnext;while(cur_Node){if(Max_Node->Value > cur_Node->Value){froMax_Node = fro_Node;Max_Node = cur_Node;}fro_Node = cur_Node;cur_Node = cur_Node->pnext;}if(Max_Node != p->pnext)Insert_sort_Swap_Node(p, p->pnext,froMax_Node, Max_Node);p = p->pnext;}}void Bucket_Sort(int *a, int size, EleLink** bucket, int ncnt){for(int i = 0; i < size; i++){int temp = a[i] / 10;EleLink *p_Ele = new EleLink;p_Ele->pnext = NULL;p_Ele->Value = a[i];EleLink *ptr = bucket[temp];EleLink *p_tmp = ptr->pnext;ptr->pnext = p_Ele;p_Ele->pnext = p_tmp;}int m = 0;for (int j = 0; j < ncnt; j++){Link_Insert_Sort(bucket[j]);EleLink *ptr = bucket[j]->pnext;while(ptr){a[m++] = ptr->Value;ptr = ptr->pnext;}}assert(m == size);}


原创粉丝点击