| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2551 人关注过本帖
标题:桶排序可以处理负数吗?
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏
 问题点数:0 回复次数:13 
桶排序可以处理负数吗?
RT,桶排序好像只能排正整数,其他的都不行,是这样吗?
自己写了代码,大家看看:
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,temp,number[10000]={0},frequency[10000]={0},i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&temp),number[temp]=temp,frequency[temp]++;
    for(i=0;i<10000;i++)
    if(number[i]!=0&&frequency[i]==1)
    printf("%d ",number[i]);
    else
    for(j=0;j<frequency[i];j++)
    printf("%d ",number[i]);
    system("pause");
    return 0;
}

搜索更多相关主题的帖子: 正整数 
2011-01-18 19:44
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:0 
先加一个足够大的数,使结果全部为正数,排序后再减回去

樱之雪,晓之车
2011-01-18 19:45
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
分开两部,一部分是正数,另一个部分为负数,分别处理

小代码,大智慧
2011-01-18 19:47
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 3楼 点线面
浮点数可以处理吗?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-18 19:52
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用sunyh1999在2011-1-18 19:52:52的发言:

浮点数可以处理吗?
乘个足够大的数, 然后再除回去。/

我就是真命天子,顺我者生,逆我者死!
2011-01-18 19:56
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
定义两个数组,一个数组处理正数,另一个数组处理负数

e.g
   point = -7
   if(point>0)
    a[point] ++;
   else
    b[-point]++;
for(i=MAX-1;MAX>-1 ;i--)
if(..)
pri -b[i]
for(i=0;i<MAX-1;i++)
if(..)
printf a[i]

小代码,大智慧
2011-01-18 19:58
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:0 
和是不是整数无关,这个排序只要求是正数,正浮点数是没有问题的

樱之雪,晓之车
2011-01-18 20:01
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 2楼 马后炮
写好了:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 99999
int main()
{
    int n,temp,number[200000]={0},frequency[200000]={0},i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&temp),temp=temp+MAX,number[temp]=temp,frequency[temp]++;
    for(i=0;i<200000;i++)
    if(number[i]!=0&&frequency[i]==1)
    printf("%d ",number[i]-MAX);
    else
    for(j=0;j<frequency[i];j++)
    printf("%d ",number[i]-MAX);
    system("pause");
    return 0;
}

 

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-18 20:02
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 6楼 点线面
最后还要把数组拼接上去。。。

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-18 20:03
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
大佬,方式很灵活,不拘一格。

小代码,大智慧
2011-01-18 20:04
快速回复:桶排序可以处理负数吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013600 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved