| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2382 人关注过本帖
标题:quicksort排序的时间复杂度是多少啊?
只看楼主 加入收藏
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
结帖率:94.64%
收藏
已结贴  问题点数:10 回复次数:12 
quicksort排序的时间复杂度是多少啊?
如题,谢谢了
搜索更多相关主题的帖子: 多少 时间 
2013-03-23 15:59
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:2 
平均O(nlogn),最坏n平方

www.qunxingw.wang
2013-03-23 17:08
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:8 
n * log(n)

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-23 17:14
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 2楼 qunxingw
程序代码:
#include <iostream>
using namespace std;

int main()
{
    int a[10],b[100]={0},c[100];//a储存原数组,b存储排序后数组,c存储个数
    int n,i,j;
    int min,max;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    min=a[0];
    max=a[0];
    for(i=1;i<n;i++)//得到数组中的最小值和最大值
    {
        if(a[i]<min)
            min=a[i];
        if(a[i]>max)
            max=a[i];
    }
    b[0]=min;
    c[0]=0;
    for(i=1;i<n+1;i++)//排序思路:找到最小值,把比最小值大N的数存到B[N]中
    {
        c[i]=1;//保证B数值里每个非0值最少有一个输出
        j=a[i-1]-b[0];
        if(b[j]==a[i-1])
        {
            b[j]=a[i-1];
            c[j]++;//如果有多个相同的非零值,着个数加一
        }
        b[j]=a[i-1];
    }
    for(i=0;i<=max-min+1;i++)
    {
        if(b[i]!=0)
            while(c[i]>0)
            {
                cout<<b[i]<<" ";
                c[i]--;
            }
        else
            continue;
    }
    return 0;
}
我觉得这个排序可以使时间复杂度为N,就是空间复杂度可能会很大,所以可以帮我看下怎么储存会好点吗?谢谢了
2013-03-23 18:23
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 3楼 peach5460
#include <iostream>
using namespace std;

int main()
{
    int a[10],b[100]={0},c[100];//a储存原数组,b存储排序后数组,c存储个数
    int n,i,j;
    int min,max;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    min=a[0];
    max=a[0];
    for(i=1;i<n;i++)//得到数组中的最小值和最大值
    {
        if(a[i]<min)
            min=a[i];
        if(a[i]>max)
            max=a[i];
    }
    b[0]=min;
    c[0]=0;
    for(i=1;i<n+1;i++)//排序思路:找到最小值,把比最小值大N的数存到B[N]中
    {
        c[i]=1;//保证B数值里每个非0值最少有一个输出
        j=a[i-1]-b[0];
        if(b[j]==a[i-1])
        {
            b[j]=a[i-1];
            c[j]++;//如果有多个相同的非零值,着个数加一
        }
        b[j]=a[i-1];
    }
    for(i=0;i<=max-min+1;i++)
    {
        if(b[i]!=0)
            while(c[i]>0)
            {
                cout<<b[i]<<" ";
                c[i]--;
            }
        else
            continue;
    }
    return 0;
}
我觉得这个排序可以使时间复杂度为N,就是空间复杂度可能会很大,所以可以帮我看下怎么储存会好点吗?
2013-03-23 18:24
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用a99875984在2013-3-23 18:24:05的发言:

#include
using namespace std;

int main()
{
    int a[10],b[100]={0},c[100];//a储存原数组,b存储排序后数组,c存储个数
    int n,i,j;
    int min,max;
    cin>>n;
    for(i=0;i
为什么要自己排呢,用STL呀

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-23 18:48
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
简单看了一下,我个人认为你的算法不适用,想法不错

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-23 18:50
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 7楼 peach5460
为何不适合?
2013-03-23 18:58
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 7楼 peach5460
我觉得这个算法理论上的时间复杂度比快速排序的时间复杂度要少的多,就是空间复杂度有点高,改进后完全可以代替快速排序啊
2013-03-23 20:26
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
n * log(n) 和 n
哪个时间复杂度高?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-23 20:54
快速回复:quicksort排序的时间复杂度是多少啊?
数据加载中...
 
   



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

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