问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

想要一个C++实现外排序的源代码

发布网友 发布时间:2022-04-24 09:57

我来回答

2个回答

热心网友 时间:2022-06-18 19:12

这点分还着急,呵呵
估计看到你的帖子的人不多
200分,马上你会有很多收获.

“给后我视情况最少20分悬赏(最多50分,恩)”这种语句会令人看起来很不舒服,真正的高手是不会帮你的,给人感觉像是完成你的任务。如果这样,为了虚拟的分,不值得费这时间和脑筋。

我的建议是,lz问问题很好,但要注意语气。高分会让更多的人看到你的问题,所以比较着急的问题我一般都给200分,如果问题真着急,这点虚拟的分又算什么呢?你说是不是这个理,呵呵。
祝你早日解决问题

热心网友 时间:2022-06-18 19:13

外排序:待排序的记录个数足够多,以至于他们必须存储在磁带、磁盘上组成外部文件,排序过程中需要多次访问外存
包括:
计数排序 Counting Sort
基数排序 Radix Sort
桶排序 Bin Sort
1.
//计数排序 Counting Sort
void CountingSort(const char *A, int len, char **ret)
{
if(len < 2 || !ret || !A)
{
return;
}

int Temp[256];
for(int i = 0; i < 256; i++)
{
Temp[i] = 0;
}

for(int i = 0; i<len; i++)
{
Temp[int(A[i])]++;
}

for(int i = 1; i<256;i++)
{
Temp[i]=Temp[i]+Temp[i-1];
}

for(int i = len-1; i >= 0 ; i--)
{
(*ret)[Temp[int(A[i])]-1] = A[i];
Temp[int(A[i])]--;
}
}
2.
//基数排序
int get_radix(int num, int radix)//取得基数位的数
{
int temp;
for(int i=0; i<radix; i++) {
temp = num%10;
num = num/10;
}
return temp;
}

void radix_sort(int *array, int size)
{
list<int> temp_list[10];
int max, radix, i, j, k;
char temp_buf[20];
list<int>::iterator iter;

memset(temp_buf, 0, sizeof(temp_buf));
max = array[0];
//找到最大数,算出最大数的位数作为基数
for (i=0; i<size; i++)
if (max < array[i])
max = array[i];

sprintf(temp_buf, "%d", max);
radix = strlen(temp_buf);

for (i=1; i<=radix; i++) {
for (j=0; j<size; j++)
temp_list[get_radix(array[j], i)].push_back(array[j]);

for (j=0, k=0; j<10; j++) {
iter = temp_list[j].begin();
for (; iter!=temp_list[j].end(); iter++)
array[k++] = *iter;
temp_list[j].clear();
}
}
}
3.
//
void comp(int k[],int m,int l)
{
int i=10,j=0,z=1,y=1,x,w,b[500][10];
for(w=0;w<m;w++)
for(x=0;x<10;x++)
{
b[w][x]=-1;
}
while(z>0)
{
z=l/i;
i=i*10;
++j; //记录最大数的位数
}
i=10;
while(j>0)
{
for(z=0;z<=m;z++)
{
x=(k[z]/y)%i;
b[z][x]=k[z];
}
w=0;
for(z=0;z<10;z++)
for(x=0;x<m;x++)
{
if(b[x][z]>=0)
{
k[w]=b[x][z];
b[x][z]=-1;
w++;
}
}
--j;
y=y*10;
}
for(z=0;z<m;z++)
{
printf("%d ",k[z]);
}
}

///////////////////////////////
下面给你一个外排序中基数排序的例子,实现从文件读取数据,在我的空间。
http://hi.baidu.com/freeemperor/blog/item/6f2222870bde2c2ec75cc300.html

参考资料:http://hi.baidu.com/freeemperor/blog/item/6f2222870bde2c2ec75cc300.html

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么把苹果电脑安装到固态硬盘苹果笔记本可以换成固态硬盘吗_百度知 ... 营转非的车保险和私车一样吗? 功夫不负有心人的观点怎么写 用具体事实说明一个观点比如“功夫不负有心人”“虚心使人进步骄傲使... 我左腿膝盖向上10cm外侧刚发现有个硬的包很疼,表面无异样请问是什么`昨 ... 左腿膝盖外侧酸是怎么回事,右腿没感觉,是缺少什么了吗,以前一般吃几天... 膝盖处外侧皮肤麻木,皮肤容易红,外侧摸关节处略大于右腿同部位关节。去... 灰色冬裙配什么短外套 2024年信用卡诈骗罪是什么样的量刑标准 徐州启星中学好不好在徐州排第几徐州启星中学 C++计数排序 乐视手机在哪开启微信设备锁 perl 飞碟操作符{ $a &lt;=&gt; $b } 运行机制 kind of的词性 排序算法及MATLAB实现 向英语初学者介绍英语这门学科背景等 计数排序c语言 英语专业有什么特点? 想问您一些排序算法的伪代码,谢啦 初中英语的学科特点 数据结构中排序的方法中稳定的有那些,不稳定的有那些(如快速排序等... 小学英语科目特点 稳定的排序算法有哪些? 英语学科特点 “二分法插入排序”、“快速排序”、“归并排序”和“堆排序”的时间... 英语学科成绩分析老师怎么写 除了经典和常用的排序算法外,还有哪些奇葩而有趣的排序算法 和常用的排序算法外,还有哪些奇葩而有趣的排序算法 稳定排序有哪些 pythonCOUNTING SORT排位后相乘对应的数字 对英语这门学科的看法 什么是计数排序 初中英语学科特点概括 C语言实现计数排序,求代码,最好用链表 急!这是个计数问题 高中英语学科特点 作为小学英语老师,你认为这一学科有什么特点 非志无以成学,志字的词类活用 狼怎么画既简单又凶? 《诫子书》中的非志了人以成学中的志是什么意思? 非学无以广才非志无以成学的意思是什么? 怎样画一只霸气的狼王 非学无以广才,非志无以成学.什么意思 狼怎么画 怎样理解非学无以广才,非志无以成学的含义 灰太狼简笔画怎么画? 非学无以广才,非志无以成学的意思 非学无以广才 非志无以成学的意思 狼的简笔画 非志无以成学 是什么意思?