| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3822 人关注过本帖
标题:最简单的排序--选择排序,你知多少?
只看楼主 加入收藏
cacker
该用户已被删除
收藏
得分:3 
回复 3楼 li_danwang
提示: 作者被禁止或删除 内容自动屏蔽
2011-01-12 06:13
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用观弈寒儒在2011-1-12 01:17:33的发言:

BG版主,有一点你说错了,选择排序的复杂度其实和冒泡排序是一样的。
你只是通过min = i;给它一个少交换的条件。
比较的次数还是没变,和冒泡排序的次数是一样的。
选择排序的 时间复杂度 一样是 0(n^2)。
两年后再来跟我扯 选择排序

我就是真命天子,顺我者生,逆我者死!
2011-01-12 09:16
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
上次漏了说一个 选择排序的要点, 对于查找第 k 小的数, 如果 k很小, 用选择排序选择,
时间复杂度为 Nk, 近乎线性, 别再抱着快速排序不放了...

我就是真命天子,顺我者生,逆我者死!
2011-01-12 09:19
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
回复 12楼 BlueGuy
呵呵,版主有点欺人了。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-01-12 10:15
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
回复 13楼 BlueGuy
不小心多回复了一个,麻烦版主帮我删掉一个。谢了。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-01-12 10:16
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
回复 13楼 BlueGuy
void selection_sort(void)
{
        int i, j, min, temp;

        for (i = 0; i < LEN; i++) {
                for (j = min = i; j < LEN; j++)
                        if (a[min] > a[j])
                                min = j;          c1
                temp = a[min];                    c2
                a[min] = a[i];                    c3
                a[i] = temp;                      c4
        }
}
首先分析最坏情况:
设n=LEN,m为内层循环执行次数。
可得:
总的执行时间=(n-1)*(c2+c3+c4)+m*c1 (1)
然后我们把m写成n的函数:
根据经验,可得:
m=n(n+1)/2
代入(1)中,一眼就可以看出来可以表示成an^2+bn+c的形式(注意n(n+1)算出来本身就已经出现二次项了),是n的二次函数。
所以最坏情况下选择排序的时间复杂度为Θ(n^2)。
同理,平均情况下选择排序的时间复杂度为Θ(n^2)。
最好情况:
序列已经排好序。
但外层和内层循环还是会执行,所以最好情况下选择排序的时间复杂度依然为Θ(n^2)。
可以看出,选择排序分不出最坏、平均、最好情况,它的时间复杂度是固定的。
所以选择排序的时间复杂度为O(n^2)。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-01-12 10:17
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:0 


                            bangmangding
2011-01-12 10:26
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
恩, 可以。
不过我看你写的代码, 就不愿意和你讨论算法。

我就是真命天子,顺我者生,逆我者死!
2011-01-12 10:26
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
回复 18楼 BlueGuy
又有点欺人了。。。
不讨论那算了。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-01-12 10:30
麦田打望者
Rank: 2
等 级:论坛游民
帖 子:62
专家分:34
注 册:2010-5-31
收藏
得分:0 
学习中
2011-01-12 12:00
快速回复:最简单的排序--选择排序,你知多少?
数据加载中...
 
   



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

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