基数排序链表类型的数组的赋值 运行时说0x00000000不能为written是怎么回事?内附代码

来源:百度知道 编辑:UC知道 时间:2024/05/20 22:09:15
void jSort(int a[],int len){

ChainNode **box=new ChainNode*[10];
ChainNode **current=new ChainNode*[10];
for (int t=0;t<10;t++){
box[t]=0;
current[t]=box[t];
}
ChainNode *whole=0;//zong lianbiao tou
ChainNode *currentWhole=whole;
int *b=new int[len];
int *c=new int[len];
ChainNode *next;
int l;
for (l=0;l<len;l++){

b[l]=a[l];
c[l]=a[l];
}
l=0;
bool more;
do{
more=false;
do{
b[l]=c[l]%10;
c[l]=c[l]/10;
if (c[l]!=0)
more=true;

current[b[l]]->data=a[l];//就是这行出错的,运行时错误
current[b[l]]=current[b[l]]->link;

}while(l<len);
for (int lt=0;lt<10;lt++){

currentWhole->link=box[lt];
currentWhole=current[lt];
//////////////
while (box[lt]){
next=box[lt]->link;
delete box[lt];
box[lt]=next;

这个自己来吧,主要是思路要正确,我这个有箱排序和基数排序的代码,可以参考一下。

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

template <class Elem>
void binsort(Elem a[], int n, int m) { //m是a中最大的元素
int i, j;
list<Elem>* b = new list<Elem>[m];
list<Elem>::iterator k;
for (i = 0; i < n; i++)
b[a[i]].push_back(a[i]);
for (i = 0, j = 0; i < m; i++)
for (k = b[i].begin(); k != b[i].end(); k++)
a[j++] = *k;
}

//b和c是临时数组,r是基数,m是a中最大的元素
template <class Elem>
void radsort(Elem a[], Elem b[], int n, int m , int r, int c[]) {
int i, j;
for (i = 1; i < m; i *= r) {
for (j = 0; j < r; j++)
c[j] = 0;
for (j = 0; j < n; j++)
c[(a[j]/i)%r]++;
for (j = 1; j < r; j++)
c[j] += c[j-1];
for (j = n - 1; j >= 0; j--)
b[--c[(a[j]/i)%r]] = a[j];