| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2947 人关注过本帖, 7 人收藏
标题:对排序的一点研究(选择排序,交换排序,插入排序)。望补充。
只看楼主 加入收藏
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:5 
接分了
2011-02-19 12:26
junyu
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2009-2-18
收藏
得分:5 
保存学习一下,谢谢分享
2011-02-19 12:42
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
以下是引用草狼在2011-2-18 22:01:14的发言:

#include
int main(){
    int num[10]={1,8,2,3,6,5,7,10,9,4},num1[10];
    int tem[12]={0},i;
    for( i=0; i<10; ++i ) tem[ num ]++;
    for( i=1; i<12; ++i ) tem+=tem;
    for( i=9; i>=0; --i ) num1[--tem[num]]=num;
    for( i=0; i<10; ++i ) printf("%d ",num1);
    printf("\n");
    return 0;
}

基数排序如果数据很大时间复杂度就要O(n*m) 其中n是要排序个数字个数,m是要排序的数字中最大那个数字的位数
没想还有这么快的排序算法 基数排序,学习了~~

[ 本帖最后由 BlueGuy 于 2011-2-19 20:12 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-02-19 20:10
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:10 
以下是引用BlueGuy在2011-2-19 20:10:05的发言:

没想还有这么快的排序算法 基数排序,学习了~~
且不说这个程序里错误多多,就算法而言,需要多大的空间复杂度啊!而且不能处理关键字相同时的排序问题。
感觉就是个极简化版的Hash查找。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 20:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
以下是引用犬虫门心在2011-2-19 20:19:20的发言:

且不说这个程序里错误多多,就算法而言,需要多大的空间复杂度啊!而且不能处理关键字相同时的排序问题。
感觉就是个极简化版的Hash查找。
恩, 差点被他误导了, 我再看看吧

我就是真命天子,顺我者生,逆我者死!
2011-02-19 20:21
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 19楼 草狼
基数排序的思想是啥?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-02-19 20:35
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用犬虫门心在2011-2-19 20:19:20的发言:

且不说这个程序里错误多多,就算法而言,需要多大的空间复杂度啊!而且不能处理关键字相同时的排序问题。
感觉就是个极简化版的Hash查找。
知之为知之,不知为不知。
1.我没看出来这个程序中有错误,就算有,也绝对不是什么错误多多。这份程序是模仿国家集训队某人论文中的代码。
2.基数排序空间复杂度是O(N),哪来的大空间复杂度?
3.这份程序绝对可以处理相同关键字的排序问题。
4.这份代码写得一定程度上确实简化了基数排序。

这是09年写的一份优化后的基数排序代码,在较大数据中表现和快速排序相近,其它的不谈了:

程序代码:
#include<stdio.h>
#define M 200001
#define Q 65535
struct REC
{
    int data;
    struct REC *next;
} listA[M], listB[M];
struct REC *baseA[1<<16], *baseB[1<<16];
int n;
int main(void)
{
    int i, t;
    struct REC *prec, *prect, **pbase;
    scanf("%d", &n);
    prec = listA;
    for(i=0; i<n; i++)
    {
        scanf("%d", &t);
        prec ++;
        (*prec).data = t;
        (*prec).next = baseA[t&Q];
        baseA[t&Q] = prec;
    }
    prec = listB;
    pbase = &baseA[Q];
    for(i=0; i<=Q; i++)
    {
        prect = *pbase;
        while(prect)
        {
            t = (*prect).data;
            prec ++;
            (*prec).data = t;
            (*prec).next = baseB[t>>16];
            baseB[t>>16] = prec;
               
            prect = (*prect).next;
        }
        pbase --;
    }
    pbase = &baseB[0];
    for(i=0; i<=Q; i++)
    {
        prect = *pbase;
        while(prect)
        {
            printf("%d ", (*prect).data);
            prect = (*prect).next;
        }
        pbase ++;
    }
    printf("\n");
    return 0;
}


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2011-02-20 22:32
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用犬虫门心在2011-2-19 20:19:20的发言:

且不说这个程序里错误多多,就算法而言,需要多大的空间复杂度啊!而且不能处理关键字相同时的排序问题。
感觉就是个极简化版的Hash查找。
不想删这个贴(我有编辑权的),留着它,给自己的狂妄以警示!

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-21 00:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用犬虫门心在2011-2-21 00:04:10的发言:

不想删这个贴(我有编辑权的),留着它,给自己的狂妄以警示!
您觉得那是 基数排序的代码 吗
搞那么几行代码就想忽悠是基数排序~~


顶多是个 分布计数排序

[ 本帖最后由 BlueGuy 于 2011-2-21 00:15 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-02-21 00:10
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
收藏
得分:0 
shell 算法好像有点不对啊,,,,,那个a[j-d] = flag;     不怕j出现负数么?????????????????
2011-02-22 16:14
快速回复:对排序的一点研究(选择排序,交换排序,插入排序)。望补充。
数据加载中...
 
   



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

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