基数排序(链表)
来源:互联网 发布:淘宝网天猫女装冬装 编辑:程序博客网 时间:2024/06/05 10:10
#include<iostream>using namespace std;typedef struct Node{ int data; struct Node *next;}LNode;void Initiate(LNode **head){ (*head)=(LNode*)malloc(sizeof(LNode)); (*head)->next=NULL;}void Insert(LNode *head,int num){ if(head==NULL) return; else { LNode *p,*q; q=head; p=(LNode *)malloc(sizeof(LNode)); p->data=num; p->next=NULL; while(q->next!=NULL) { q=q->next; } q->next=p; }}LNode * GetFirstNode(LNode *head)//得到第一个结点{ if(head->next==NULL) return NULL; else { LNode *p; p=head->next; head->next=p->next;//通过循环此语句,使head最后指向null return p; }}void AppendNode(LNode *head,LNode *node)//结点与十个新建指针链接{ if(head==NULL) return; else { LNode *p; p=head; while(p->next!=NULL)//当位中数字有相同的且已经被链表链接的时候 { p=p->next; } p->next=node; node->next=NULL; }}void Total(LNode *L,LNode *head)//重新与链表head链接{ LNode *p; p=L; while(p->next!=NULL)//在进行了每次的位数的调整后,需要重新与链表head链接,如果第一次链接就不需要p就不需要后移,否则需要 { //后移到最后一个位置,好指向新的节点 p=p->next; } p->next=head->next;}int GetNum(LNode *p,int i)//得到每个数位上的数字{ int data=p->data; int a,l=0,sum=1; for(l=0;l<i;l++)//如果是取个位,则除1,%10,十位除10,%10,百位除100,%10 { sum=sum*10; } a=data/sum; return a%10;}//第二个形参表示参加排序的整数最大位数一共有count位数字void radix_sort(LNode *head,int count){ LNode *p[10],*q; int i,j,k; for(j=1;j<=count;j++) { //十个头结点初始化 for(i=0;i<10;i++) { Initiate(&p[i]); } //链表从头到尾扫描,并将扫描到的节点脱离链表。 while(head->next!=NULL) { q=GetFirstNode(head); k=GetNum(q,j); //取得链表节点第j位的元素值k AppendNode(p[k],q); //将该节点连接到10个链表相应的位置 } //将10个链表从0-9依次连接到head节点后面 for(i=0;i<10;i++) { Total(head,p[i]); } } for(i=0;i<10;i++) { delete(p[i]);//最后把生成的十个节点空间释放 } }void printSL(LNode *head){ LNode *p; p=head->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; }}int main(){ LNode *head; Initiate(&head); Insert(head,921); Insert(head,892); Insert(head,538); Insert(head,439); radix_sort(head,3); //表示参加排序的整数最大位数一共有4位数字 printSL(head); system("pause");}
http://blog.csdn.net/u014309268/article/details/39653579
#include <iostream>#include <stdlib.h>using namespace std;typedef struct node{ int num; struct node* pnext;}qnode,*pnode;pnode init(){ pnode head; head=(pnode)malloc(sizeof(qnode)); head->pnext=NULL; return head;}void puts(pnode head,int e){ pnode p,q; if(head==NULL) return; else { q=head; p=(pnode)malloc(sizeof(qnode)); p->num=e; p->pnext=NULL; while(q->pnext!=NULL) { q=q->pnext; } q->pnext=p; }}pnode getnode(pnode head){ if(head->pnext==NULL) return NULL; else { pnode p=head->pnext; head->pnext=p->pnext; return p; }}int power(pnode head,int j){ pnode p=head; int num_=p->num; int a,i=0,sum=1; for(i=0;i<j;i++) { sum=sum*10; } a=num_/sum; return a%10;}void appendnode(pnode head_,pnode node){ if(head_==NULL) return ; else { pnode p; p=head_; while(p->pnext!=NULL) { p=p->pnext; } p->pnext=node; node->pnext=NULL; }}void total(pnode head,pnode node){ pnode p=head; while(p->pnext!=NULL) { p=p->pnext; } p->pnext=node->pnext;}void radix(pnode head,int count){ pnode a[10],p; int i,j,q; for(j=1;j<=count;j++) { for(i=0;i<10;i++) { a[i]=init(); } while(head->pnext!=NULL) { p=getnode(head); q=power(p,j); appendnode(a[q],p); } for(i=0;i<10;i++) { total(head,a[i]); } } for(i=0;i<10;i++) { delete(a[i]); }}void traverse(pnode head){ pnode q=head->pnext; while(q!=NULL) { cout<<q->num<<' '; q=q->pnext; }}int main(){ pnode head; head=init(); puts(head,321); puts(head,892); puts(head,538); puts(head,439); radix(head,3); traverse(head); return 0;}
0 0
- 基数排序(链表)
- 基数排序(转)
- 基数排序(C)
- 基数排序(radixSort)
- 基数排序(java实现)
- 基数排序 (Radix sort)
- 基数排序 radixsort(LSD)
- 基数排序(java实现)
- 基数排序(radix sort)
- 基数排序(数组版)
- 基数排序(LSD)
- 基数排序(C++版)
- 基数排序(桶排序)
- 基数排序(桶排序)
- 基数排序(桶排序)
- 基数排序(未)
- 桶排序(基数排序)
- 基数排序(Radix Sort)
- lk 之dpc
- NDK工程错误
- 粗糙集,邻域粗糙集与实域粗糙集概述
- Excel插件开发
- poj 1042 && uva 757 && la 5422
- 基数排序(链表)
- (一)环境搭建篇
- 在Android中实现阴影效果 背景阴影
- 一个惊悚的故事
- elasticsearch源码分析之Transport(五)
- 重启rsyslog服务时出现问题(误删/var/log/messages解决方案)
- 图的储存(边集数组)
- Java 数组
- Android热补丁技术,ClassLoader、dexposed、Andfix、smart app updates补丁技术收集整理