| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1543 人关注过本帖, 1 人收藏
标题:能不能讲解一下冒泡排序和选择排序啊!!!!!!
只看楼主 加入收藏
现实太狗
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2013-12-1
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:13 
能不能讲解一下冒泡排序和选择排序啊!!!!!!
例如一个数组啊[10]={3,2,5,24,54,23,56,21,1,0}.讲解占主要   谢谢!!!!!!!
2013-12-03 11:48
好男儿!
Rank: 2
来 自:陕西省
等 级:论坛游民
帖 子:29
专家分:52
注 册:2013-7-26
收藏
得分:1 
从左至右,拿出第一个数字和后边所有的比,只要比第一个大了,就交换位置,这样保证了第一个位置的数字是最大的,接着,拿第二个和后边的所有的比,找出次大的,以此类推。。。(这是降序),不建议用冒号排序法,时间复杂度为O(n^2),最好用两组下标就能解决问题,时间复杂度0(n),只需要遍历一遍就排出来了。。。数组玩的就是下标,这是核心,慢慢体会吧。

[ 本帖最后由 好男儿! 于 2013-12-3 13:01 编辑 ]
2013-12-03 12:59
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:1 
在论坛里搜索一下
很多帖子讲解都很详细的

三十年河东,三十年河西,莫欺少年穷!
2013-12-03 13:39
vivalatom
Rank: 2
等 级:论坛游民
帖 子:23
专家分:39
注 册:2013-12-2
收藏
得分:2 
以升序排列为例,先取a[0]=3,然后向后比较,遇到a[1]=2之后a[0],a[1]交换,然后此时a[0]是2,再与a[2]比较以此类推,一轮完成之后a[0]就是最小值了,然后再从a[1]开始比较,依此类推。这是冒泡排序。
选择排序的话是冒泡排序的优化版,就是设置一个变量,每次用前面一个数字和后面一个比较,记录较小一个的地址,一次循环之后变量取到最小值所在地址,最后把最小值和a[0]交换,依此类推。
如,先取a[0]=3,设置变量为k,a[0]和a[1]比较,a[1]较小,k=1,a[1]和a[2]比较,a[1]较小,k仍为1,依此类推,最后k=9,所以a[0]与a[9]交换,依此类推。
因为赋值只需要一行代码,交换需要三行,所以选择排序比较经济,但是两种方法本质是一样的,时间复杂度相同。
2013-12-03 14:03
facebook88
Rank: 1
等 级:新手上路
帖 子:11
专家分:6
注 册:2013-12-3
收藏
得分:1 
a,b,c,d,e
冒泡排序:a和b,c,d,e比较,取最大或者最小的一个放在最后一个或者第一个;一次类推。
选择排序:取a;取b,a与b比较,排序;取c;与a,b比较,排序;一次类推。
2013-12-03 14:41
现实太狗
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2013-12-1
收藏
得分:0 
回复 2楼 好男儿!
#include<stdio.h>
#define   N  10
void main()
{
    int a[N],i,j,k,t;
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    printf("\n");
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=1;j<N-i;j++)
            if(a[j]<a[k])
                k=j;
            for(i!=k)
            {
                t=a[k];
                a[k]=a[i];
                a[i]=t;
            }
    }
    printf("   %d   ",a[i]);
}
请问这个哪里错了
2013-12-03 19:58
好男儿!
Rank: 2
来 自:陕西省
等 级:论坛游民
帖 子:29
专家分:52
注 册:2013-7-26
收藏
得分:1 
[quote]以下是引用现实太狗在2013-12-3 19:58:15的发言:

#include<stdio.h>
#define   N  10
void main()
{
    int a[N],i,j,k,t;
    for(i=0;i<N;i++)
    scanf("%d",&a);
    printf("\n");
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=1;j<N-i;j++)  //这里理解错了,当前i要和后边所有的比,即j从下标i-下标9(最后一个)挨个比较,遍历一遍,所以条件是j < N
                k=j;        
            if(a[j]<a[k])  //这里也有问题,你上一步令k = j,你的比较毫无意义,a[j] == a[k]永远成立
            for(i!=k)      //建议你把数组本质弄清楚,不懂下标,很难利用数组。
            {
                t=a[k];
                a[k]=a;
                a=t;
            }
    }
    printf("   %d   ",a);
    }
2013-12-03 21:10
QQ984448360
Rank: 2
等 级:论坛游民
帖 子:13
专家分:11
注 册:2013-11-12
收藏
得分:1 
#include<stdio.h>
#define   N  10
void main()
{
    int a[N],i,j,k,t;
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    printf("\n");
    for(i=1;i<N;i++)
        for(j=0;j<N-i;j++)
        {    if(a[j]<a[j+1])
                t=a[j];
                a[j+1]=a[j];
                a[j]=t;
            }
    for(i=0;i<N;i++)
    printf("   %d   ",a[i]);
}
2013-12-03 21:20
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:1 
http://www.这里的课程讲的非常清楚......第八章..

任重而道远
2013-12-03 22:38
现实太狗
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2013-12-1
收藏
得分:0 
回复 8楼 QQ984448360
朋友不对呀!!
2013-12-04 13:30
快速回复:能不能讲解一下冒泡排序和选择排序啊!!!!!!
数据加载中...
 
   



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

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