问答文章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
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 C++计数排序 乐视手机在哪开启微信设备锁 perl 飞碟操作符{ $a &lt;=&gt; $b } 运行机制 kind of的词性 排序算法及MATLAB实现 向英语初学者介绍英语这门学科背景等 计数排序c语言 英语专业有什么特点? 想问您一些排序算法的伪代码,谢啦 初中英语的学科特点 数据结构中排序的方法中稳定的有那些,不稳定的有那些(如快速排序等... 小学英语科目特点 稳定的排序算法有哪些? 英语学科特点 “二分法插入排序”、“快速排序”、“归并排序”和“堆排序”的时间... 英语学科成绩分析老师怎么写 除了经典和常用的排序算法外,还有哪些奇葩而有趣的排序算法 和常用的排序算法外,还有哪些奇葩而有趣的排序算法 稳定排序有哪些 pythonCOUNTING SORT排位后相乘对应的数字 对英语这门学科的看法 什么是计数排序 初中英语学科特点概括 C语言实现计数排序,求代码,最好用链表 急!这是个计数问题 高中英语学科特点 作为小学英语老师,你认为这一学科有什么特点 非志无以成学,志字的词类活用 狼怎么画既简单又凶? 《诫子书》中的非志了人以成学中的志是什么意思? 非学无以广才非志无以成学的意思是什么? 怎样画一只霸气的狼王 非学无以广才,非志无以成学.什么意思 狼怎么画 怎样理解非学无以广才,非志无以成学的含义 灰太狼简笔画怎么画? 非学无以广才,非志无以成学的意思 非学无以广才 非志无以成学的意思 狼的简笔画 非志无以成学 是什么意思?