c语言基础问题,请大佬们指点

amstelang 2020-01-30 03:11:21
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define d 6
#define radix 10
////////////////////////////////////////////////////////////////////////////////////////////////
int getdigit(int x,int y){
int a[]={1,1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9}; ////应为待排数据最大数据位数
return (((int)x/a[y])%10);
}

void msdradix_sort(int arr[],int begin,int end,int w,int in)
{
int i,j;
int count[radix]; //count表示每个桶中元素个数
int *bucket=(int *)malloc((end-begin+1)*sizeof(int));
//统计各桶需要装的元素的个数
for(i=0;i<10;++i)count[i]=0;
for(i=begin;i<=end;++i){
count[getdigit(arr[i], w)]++;
}

//求出桶的边界索引,count[i]值为第i个桶的右边界索引+1
for(i=1;i<radix;++i){
count[i]+=count[i-1];
}
for(i=end;i>=begin;--i)
{
j=getdigit(arr[i],w); //求出关键码的第d位的数字, 例如:576的第3位是5
bucket[count[j]-1]=arr[i]; //放入对应的桶中,count[j]-1是第j个桶的右边界索引
--count[j]; //第j个桶放下一个元素的位置(左边界索引+1)
}
//从各个桶中收集数据
for(i = begin, j = 0;i <=end; ++i, ++j)
{
arr[i] = bucket[j];
}
//释放存储空间
free(bucket);
for(i=0;i<radix-1;++i)
{
if (in>count[i]&&in<count[i+1]&&w>3)
{
int p1=begin+count[i]; //第I个桶的左边界
int p2=begin+count[i+1]-1;
msdradix_sort(arr,p1, p2, w-1,in-count[i]);
}
}
}



void main ()
{
int i;
int arr[10]={0};
int crr[10]={132101,113002,115703,182304,132105,113006,113007,132308,192109,177715};
msdradix_sort(crr,0,9,6,1);
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
printf("\n");
}
}

这是一段桶排序的程序,我想将crr数组输入 msdradix_sort函数得到排序了的arr,但是我的这段程序只能得到初始化的arr,请问大佬们该如何操作
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
amstelang 2020-02-01
  • 打赏
  • 举报
回复
好的,明白你的意思了
qybao 2020-01-31
  • 打赏
  • 举报
回复
用你原来main方法
void main ()
{
int i;
int arr[10]={0};
int crr[10]={132101,113002,115703,182304,132105,113006,113007,132308,192109,177715};
msdradix_sort(crr,0,9,6,1);
for(i=0;i<10;i++)
{
printf("%d",crr[i]); //这里换成打印crr,你就能理解我说的是什么意思了
printf("\n");
}
}
qybao 2020-01-31
  • 打赏
  • 举报
回复
我都说了,你的排序方法msdradix_sort(int arr[],int begin,int end,int w,int in) 的参数arr就是个传入传出参数,排序结果就保存在参数arr里,如果你只是希望arr和crr不一样,那最简单的方法就是
void main ()
{
int i;
int arr[10]={0};
int crr[10]={132101,113002,115703,182304,132105,113006,113007,132308,192109,177715};
memcpy(arr, crr, sizeof(crr)); //把crr复制给arr
msdradix_sort(arr,0,9,6,1); //直接用arr作为参数,因为排序结果就保存在arr里
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
printf("\n");
}
}
amstelang 2020-01-31
  • 打赏
  • 举报
回复
补充一下,我想将crr这个数组作为参数输入函数并得到一个名字不一样的排序结果arr
amstelang 2020-01-30
  • 打赏
  • 举报
回复
排序结果是arr呀,怎么是crr
qybao 2020-01-30
  • 打赏
  • 举报
回复
你的arr都没用到,也没传到排序方法里
看排序方法,好像排序好的结果也是存在crr,那你直接打印crr就好了
一、C语言自我YY1)、C语言是许多高级计算机语言的基础,学好C语言能更好的学习其他高级语言,为以后的学习打基础;往深学C语言的话那就是学到C在Linux里的应用,Linux十分强大。2)、C语言是一种计算机程序设计语言。具有高级语言的特点,又具有汇编语言的特点。C语言可作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。3)、应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。4)、C语言是面向过程语言,C语言通过windows/linux平台下编译的,是直接运行在windows/linux平台下的,而XX始终是运行在他的虚拟机之上的;所以理论上C语言能做一些相对于比较底层的工作,像XX就不能编写Windows病毒。5)、如果要利用编程来做一些windows优化工作的话,建议还是利用C语言C语言是目前世界上流行、使用最广泛的高级程序设计语言6、很多编译器,几乎所有操作系统Windows,Linux,Unix的大部分代码都是C,C在背后做了很多东西的,也许开发游戏用C++,安卓用XX更为合适,图形界面的用其他语言开发效率更高一些(因为他们封装了很多东西),但同样的原因导致略微接近底层的功能其他语言根本干不了!Windows的API都是按照C语言的格式给的,这也很能说明问题!嵌入式开发更是离不了C语言!纵观电脑发展几十年,C语无所不能呀!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧