| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2631 人关注过本帖
标题:选择法排序问题...
只看楼主 加入收藏
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
可能用在这里不太合适,但是编程有个原则:在效率瓶颈处优化,而不是盲目在任何地方优化。并且优先优化算法,而不是优化局部实现。这样才能写出好维护的代码。不过在这里可能已经类似狡辩了。其实广陵的说法很对,这个判断可有可无,但是加上能让运算快点儿,而且代码更清晰,所以在这里,还是加上比较好的~~~
2008-11-03 11:00
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
回复20楼的帖子
数据多了-》计数排序应该是最好的

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-11-03 11:30
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
LS:计数排序限制太多,从内存使用来看,估计连int32都没办法实现吧……
2008-11-03 12:10
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include "stdio.h"
#include"stdlib.h"
#include"time.h"
void Eva(int *a,int len)
{
   srand((unsigned)time( NULL ) );  
    for(int i=0;i<len;i++)
        a[i]=rand()%10000;
}
void Print(int *a,int len)
{
    for(int i=0;i<len;i++)
        printf("%5d",a[i]);
}
void sort(int *a,int len)
{
   for(int i=0;i<len-1;i++)
    {
       for(int j=i+1;j<len;j++)
            if(a[j]<a[i])
            {
                int t=a[i];                    
                    a[i]=a[j];
                    a[j]=t;
            }

    }
}
int main(void)
{
    int a[10];
    Eva(a,10);
    printf("\n排列前是:\n");
    Print(a,10);
    sort(a,10);
    printf("\n排列后是:\n");
    Print(a,10);
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-11-3 13:33 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-11-03 13:27
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
LS是标准的冒泡……阿门……
2008-11-03 13:28
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
不算是..我的时间开销其实很大...我的有点像选择排序...但是又不是...你可以自己分析下

学习需要安静。。海盗要重新来过。。
2008-11-03 13:31
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
这不就是冒泡么?只不过是一次内循环就决定了一位,但是本质仍然是冒泡……

效率应该比经典冒泡还差,因为经典冒泡是同时处理最大和最小元素的……
2008-11-03 13:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include "stdio.h"
#include"stdlib.h"
#include"time.h"
class Csort
{
    int *a;
    int len;
public:
    Csort(int* ,int );
    void Eva();
    void Print();
    virtual void sort();
    ~Csort();
};
Csort::Csort(int*a,int len)
{
      this->a=a;
    this->len=len;
}
void Csort::Eva()
{
   srand((unsigned)time( NULL ) );  
    for(int i=0;i<len;i++)
        a[i]=rand()%1000;
}
void Csort::Print()
{
    for(int i=0;i<len;i++)
        printf("%5d",a[i]);
}
void Csort::sort()
{
   for(int i=0;i<len-1;i++)
   {   
       int k=i;
       for(int j=i+1;j<len;j++)
            if(a[j]<a[k]) k=j;

            if(k>i)
            {
                int t=a[k];                    
                    a[k]=a[i];
                    a[i]=t;
            }

    }
}
Csort::~Csort()
{
}
int main(void)
{
    int a[10];
    Csort s(a,10);
    s.Eva();
    printf("\n排列前是:\n");
    s.Print();
    s.sort();
    printf("\n排列后是:\n");
    s.Print();
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-11-3 13:56 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-11-03 13:43
sbwawww
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-11-3
收藏
得分:0 
新手看题,雾里看花
2008-11-03 14:02
jackzero0
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-12-10
收藏
得分:0 
#include<stdio.h>
int main()
{
    int i,index,k,n,temp;
    int a[10];
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    {
        for(i=0;i<n;i++)
        k=i;
        index=a[k];
        if(a[i+1]<index)
        {
            temp=a[i];a[i]=a[i+1];a[i+1]=temp;
        }
    }
    for(i=0;i<n;i++)
        printf("%d",a[i]);
    printf("\n");
}
2008-12-10 15:10
快速回复:选择法排序问题...
数据加载中...
 
   



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

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