c语言radix函数用法,Radix Sort用C实现

我试图通过创建一个程序来改善我的C,该程序将需要1到10 ^ 6之间的大量数字.将在每次传递中存储数字的存储桶是节点数组(其中节点是我创建的包含值和下一个节点属性的结构).

在根据最低有效值将数字排序到桶中之后,我将一个桶的末尾指向另一个桶的开头(这样我可以快速获得存储的数字而不会中断订单).我的代码没有错误(编译或运行时),但我已经找到了解决剩下的6次迭代的问题(因为我知道数字的范围).

我遇到的问题是,最初这些数字是以int数组的形式提供给radixSort函数的.在排序的第一次迭代之后,数字现在存储在结构数组中.有什么方法可以重新编写我的代码,这样我只有一个for循环进行7次迭代,或者我需要一个for循环运行一次,而另一个循环下面会运行6次才能返回完全排序清单?

#include

#include

using namespace std;

struct node

{

int value;

node *next;

};

//The 10 buckets to store the intermediary results of every sort

node *bucket[10];

//This serves as the array of pointers to the front of every linked list

node *ptr[10];

//This serves as the array of pointer to the end of every linked list

node *end[10];

node *linkedpointer;

node *item;

node *temp;

void append(int value, int n)

{

node *temp;

item=new node;

item->value=value;

item->next=NULL;

end[n]=item;

if(bucket[n]->next==NULL)

{

cout << "Bucket " << n << " is empty" <

bucket[n]->next=item;

ptr[n]=item;

}

else

{

cout << "Bucket " << n << " is not empty" <

temp=bucket[n];

while(temp->next!=NULL){

temp=temp->next;

}

temp->next=item;

}

}

bool isBucketEmpty(int n){

if(bucket[n]->next!=NULL)

return false;

else

return true;

}

//print the contents of all buckets in order

void printBucket(){

temp=bucket[0]->next;

int i=0;

while(i<10){

if(temp==NULL){

i++;

temp=bucket[i]->next;

}

else break;

}

linkedpointer=temp;

while(temp!=NULL){

cout << temp->value <

temp=temp->next;

}

}

void radixSort(int *list, int length){

int i,j,k,l;

int x;

for(i=0;i<10;i++){

bucket[i]=new node;

ptr[i]=new node;

ptr[i]->next=NULL;

end[i]=new node;

}

linkedpointer=new node;

//Perform radix sort

for(i=0;i<1;i++){

for(j=0;j

x=(int)(*(list+j)/pow(10,i))%10;

append(*(list+j),x);

printBucket(x);

}//End of insertion loop

k=0,l=1;

//Linking loop: Link end of one linked list to the front of another

for(j=0;j<9;j++){

if(isBucketEmpty(k))

k++;

if(isBucketEmpty(l) && l!=9)

l++;

if(!isBucketEmpty(k) && !isBucketEmpty(l)){

end[k]->next=ptr[l];

k++;

if(l!=9) l++;

}

}//End of linking for loop

cout << "Print results" <

printBucket();

for(j=0;j<10;j++)

bucket[i]->next=NULL;

cout << "End of iteration" <

}//End of radix sort loop

}

int main(){

int testcases,i,input;

cin >> testcases;

int list[testcases];

int *ptr=&list[0];

for(i=0;i

cin>>list[i];

}

radixSort(ptr,testcases);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值