正在加载图片...
int number+l], pos[w+1 for(i=0Kn;计+) numbera]++;∥计数 for(pos[0=0=1<n;计+ pos[i= pos[i-I]num[,/pos数组可以把关键字的值映射为元素在排好的序 列中的位置 for(i=0in;计+)∥构造有序数组c clos[a[l++]=aJ for(i=0;i<n;计 a[]c[ i//Enum Sort 分析本算法参考了第五章三元组稀疏矩阵转置的算法思想,其中的pos数组和那 里的cpot数组起的是相类似的作用 typedef enum{0,112,34,56,7,8,9} digit;∥个位数类型 typedef digit!3]num;/3位自然数类型假设低位存储在低下标高位存储在高下标 void Enum radiⅸSort( num a[ l, int n)/利用计数实现基数排序,其中关键字为3位 自然数共有n个自然数 int number pos; num cMAXSIZEI for(=0j3j+)∥依次对个位十位和百位排序 for(i=0;i<n++) numbera[j]H+;∥计数 for(pos[0=0, F1; i<n; i++) pos[ i=pos[-1num;把关键字的值映射为元素在排好的序列中的位置 for(i=0;n;i++)∥构造有序数组c Iposa00++]=a] for(i=0; i<n; i++) a[]=c[ i//for //Enum Rad ix Sort 分析计数排序是一种稳定的排序方法正因为如此它才能够被用来实现基数排 序 10.46 typedef struct i Shadow,影子序列的记录类型int number[w+1],pos[w+1]; for(i=0;i<n;i++) number[a[i]]++; //计数 for(pos[0]=0,i=1;i<n;i++) pos[i]=pos[i-1]+num[i]; //pos 数组可以把关键字的值映射为元素在排好的序 列中的位置 for(i=0;i<n;i++) //构造有序数组 c c[pos[a[i]]++]=a[i]; for(i=0;i<n;i++) a[i]=c[i]; }//Enum_Sort 分析:本算法参考了第五章三元组稀疏矩阵转置的算法思想,其中的 pos 数组和那 里的 cpot 数组起的是相类似的作用. 10.45 typedef enum {0,1,2,3,4,5,6,7,8,9} digit; //个位数类型 typedef digit[3] num; //3 位自然数类型,假设低位存储在低下标,高位存储在高下标 void Enum_Radix_Sort(num a[ ],int n)//利用计数实现基数排序,其中关键字为 3 位 自然数,共有 n 个自然数 { int number ,pos ; num c[MAXSIZE]; for(j=0;j<3;j++) //依次对个位,十位和百位排序 { for(i=0;i<n;i++) number[a[i][j]]++; //计数 for(pos[0]=0,i=1;i<n;i++) pos[i]=pos[i-1]+num[i]; //把关键字的值映射为元素在排好的序列中的位置 for(i=0;i<n;i++) //构造有序数组 c c[pos[a[i][j]]++]=a[i]; for(i=0;i<n;i++) a[i]=c[i]; }//for }//Enum_Radix_Sort 分析:计数排序是一种稳定的排序方法.正因为如此,它才能够被用来实现基数排 序. 10.46 typedef struct { int key; int pos; } Shadow; //影子序列的记录类型
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有