风云小站 » 『 求助专区 』 » 数据结构题求解
本页主题: 数据结构题求解 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

a1630016900
级别: 资深会员


精华: 0
发帖: 2281
威望: 1338 点
风云币: 2119 元
专家分: 0 分
在线时间:383(小时)
注册时间:2007-01-13
最后登录:2008-04-28

 数据结构题求解

这个题我同学说一点思路也没有,而我对这个又非常陌生,只好发到这里让大家帮忙做做了。
在这里先谢谢各位了  数据结构题


有一种排序方法叫计数排序,其基本思想是:
设待排序元素的个数为n,待排序元素放在数组R[1..n]中(0号单元不用),关键字为R[K].key;关键字的类型是整型,最大值是MAX,最小值是MIN;设:m=max-min+1;设置三个辅助数组 1)count[0..m-1];  2)locate[0..m-1];  3)D[1..n];其解释如下:
count[0..m-1]:该数组的数组元素  count[k](0≤k≤m-1),初值为关键字是k+MIN的第一个元素在排好序后的正确位置。在算法的执行过程中,表示下一次找到的关键字值为k+MIN的元素在排好序后的正确位置。
D[0..n]:该数组为和R[0..n]同类型的数组,存放排好序的中间结果。
  题目要求写出完成下列任务各程序段(从小到大排序)
○1 初始化数组count
○2 扫描待排数组R一遍,使count有正确值
○3 根据count值,求locate的值
○4 根据locate的值,扫描R一遍,将R中的元素放在D中的正确位置上,并修正locate的值
○5 将已有序的D中的元素,放回R中,使R中元素有序
○6 设R中的关键字如下表所示,给出执行完第○1○2○3步后,数组count和数组locate的值

R    1    2    3    4    5    6    7    8    9    10    11    12
.keyt    4    2    -2    0    4    -2    5    0    5    2    7    2

顶端 Posted: 2007-11-08 18:23 | [楼 主]
jianxin
助人为乐奖
级别: 中级会员


精华: 0
发帖: 785
威望: 366 点
风云币: 2842 元
专家分: 0 分
论坛群: 啦啦大軍
在线时间:178(小时)
注册时间:2007-05-29
最后登录:2008-04-29

 

算法代码给你,编程需要自己思考,看着下面的代码,应该可以做出来的

void Counting_Sort(int a[], int b[], int l, int k)
{
    int* c = new int[k];
    memset(c, 0, k * sizeof(int));
    for (int j = 0; j < l; j++) c[a[j]]++;
    for (int j = 1; j < k; j++) c[j] += c[j - 1];
    for (int j = l - 1; j >= 0; j--)
    {
        b[c[a[j]] - 1] = a[j];
        c[a[j]]--;
    }
    delete []c;
}
其中a为输入,b为输出,l为元素个数,k为元素最大值。
顶端 Posted: 2007-11-11 23:10 | 1 楼
帖子浏览记录 版块浏览记录
风云小站 » 『 求助专区 』
感谢,曾经的版主
Total 0.009799(s) query 7, Time now is:12-27 19:05, Gzip enabled 渝ICP备20004412号-1

Powered by PHPWind v6.3.2 Certificate Code © 2003-07 PHPWind.com Corporation
Skin by Chen Bo