排序算法(七)基数排序
来源:互联网 发布:51单片机p0口上拉电阻 编辑:程序博客网 时间:2024/06/05 10:31
从低位到高位排序,用hash来实现
#include <iostream>#define N 400using namespace std;typedef struct Hdata{int data;struct Hdata *next;}Node;void radixSort(int *pData,unsigned int nLen);bool GetMax(int *pData,unsigned int nLen,int &nMax);int GetDigit(int nNum);void deleteLinklist(Node *&pHead);void addLinkList(Node *&pHead,int nData);void printLinklist(Node *pHead);unsigned int abstractIndex(unsigned int nData,unsigned int nIndex);int data[N];int main(){for( int i=0;i<N;i++)data[i]=N-i;for( int i=0;i<N;i++)cout<<data[i]<<'\t';cout<<endl;radixSort(data,N);for( int i=0;i<N;i++)cout<<data[i]<<'\t';cout<<endl;getchar();}void radixSort(int *pData,unsigned int nLen){if (pData==NULL||nLen==0){return;}int nMax;GetMax(pData,nLen,nMax);int nTime=GetDigit(nMax);Node *p[10];for (int i=0;i<10;i++){p[i]=NULL;}for (int i=1;i<=nTime;i++){//把对应的位数提出来 放到桶里面for (unsigned int j=0;j<nLen;j++){unsigned int nIndex=abstractIndex(pData[j],i); //把第i位提出来addLinkList(p[nIndex],pData[j]);}// 重新排列出来放到原来的pData中unsigned int nIndexTemp=0;for (int j=0;j<10;j++){Node *pTemp=p[j];while(pTemp!=NULL){pData[nIndexTemp]=pTemp->data;pTemp=pTemp->next;nIndexTemp++;}}//for (int j=0;j<10;j++){deleteLinklist(p[j]);}}}bool GetMax(int *pData,unsigned int nLen,int &nMax){if (pData==NULL||nLen==0){nMax=0;return false;} nMax=pData[0];for (unsigned int i=0;i<nLen;i++){if (pData[i]>nMax){nMax=pData[i];}}return true;}int GetDigit(int nNum){int nTemp=nNum;int nDigit=0;while(nTemp!=0){nTemp/=10;nDigit++;}return nDigit;}void deleteLinklist(Node *&pHead){if (pHead==NULL){return;}Node *pPre=pHead;Node *pAfter=pHead->next;while (pAfter!=NULL){delete pPre;pPre=pAfter;pAfter=pAfter->next;}delete pPre;pPre=NULL;pHead=NULL;}void addLinkList(Node *&pHead,int nData){Node *pTemp=pHead;if (pTemp==NULL){pHead=new Node;pHead->data=nData;pHead->next=NULL;return;}while(pTemp->next!=NULL)pTemp=pTemp->next;pTemp->next=new Node;pTemp=pTemp->next;pTemp->data=nData;pTemp->next=NULL;}unsigned int abstractIndex(unsigned int nData,unsigned int nIndex){unsigned int nTemp=nData;unsigned int nResult;for (unsigned int i=0;i<nIndex;i++){nResult=nTemp%10;nTemp/=10;}return nResult;}void printLinklist(Node *pHead){if (pHead==NULL){return;}Node *pTemp=pHead;while(pTemp!=NULL){cout<<pTemp->data<<'\t';pTemp=pTemp->next;}cout<<endl;}
0 0
- 排序算法(七)基数排序
- 排序算法之—— 基数排序(七)
- 排序与查找实例(七):基数排序
- 排序算法-基数排序(RadixSort)
- 基数排序算法(排序详解)
- 排序算法(十一) 基数排序
- 排序算法(4):基数排序
- 排序算法(八):基数排序
- 算法学习(七)——基数排序
- 排序算法-基数排序_基数排序
- Java排序算法(十一):基数排序
- 排序算法总结(二)基数排序
- Java排序算法总结(八):基数排序
- Java排序算法(十一):基数排序
- Java排序算法(十一):基数排序 .
- Java排序算法(十):基数排序
- 排序算法(八)——基数排序
- 数据结构中排序算法- 基数排序(5)
- CCNode(成员ContentSize Camera Grid Child Par UserData Scheduler ActionManager ComponentContainer+颜色节点)
- SQL基本语法(MS SQL)1
- 《Programming in Lua 3》读书笔记(一)
- 【大话QT之八】模拟QQ系统设置面板实现功能
- OpenGL显示时钟
- 排序算法(七)基数排序
- C++中的内存对齐
- ORA-27100 shared memory realm already exists错误解决方法
- php网站制作(2)-thinkphp3.2.1简单框架学习
- [POJ][1017]Packets
- CCGLBufferedNode(作为CCGrid3D CCLayerColor CCProgressTimer CCSprite CCTexture2D的基类(提供渲染接口))
- 23种设计模式--2 结构型模式
- C#实现函数根据返回类型重载
- 乱码问题集锦