| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1991 人关注过本帖
标题:初学者之经典1——冒泡排序(适合最最初级的菜菜们)
只看楼主 加入收藏
菜虫编编
Rank: 1
等 级:新手上路
帖 子:18
专家分:1
注 册:2010-10-3
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:30 
初学者之经典1——冒泡排序(适合最最初级的菜菜们)
#include <stdio.h>
#include <stdlib.h>
main()
{
  int ctr,inner,outer,didSwap,temp;     /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
  int nums[10];                         /*定义整型数组为10个元素,存放以下的随机*/
  for (ctr=0;ctr<10;ctr++)
    { nums[ctr]=(rand()%99)+1; }        /*利用rand()函数产生随机数,%99表示产生随机数不超过三位数*/
  printf("\nHere is the list befor the sort:");   /*排列之前*/
  for (ctr=0;ctr<10;ctr++)
    { printf("\n%d",nums[ctr]); }        /*在显示屏上输出由上面随机产生的数字,并每输出一个换行*/
/*以下才是重点,也是算法所在*/
  for (outer=0;outer<9;outer++)      /*执行9次外循环,目的是每一个数字都能与相邻的数字作大小比较*/
    { didSwap==0;
      for (inner=outer;inner<10;inner++)  /*以下自己好好去体会吧!!慢慢悟~~~~*/
        { if (nums[inner]<nums[outer])
            { temp=nums[inner];
              nums[inner]=nums[outer];
              nums[outer]=temp;
              didSwap==1;
             }
          }
        if (didSwap==0)
          { break; }
      }
  printf("\nHere is the list after it is sorted:");  /*排列之后*/
  for (ctr=0;ctr<10;ctr++)
    { printf("\n%d",nums[ctr]);}
  getch();
}                                     /*俺测试通过,有兴趣的话也试试吧!!~~*/


[ 本帖最后由 菜虫编编 于 2010-10-3 16:06 编辑 ]
搜索更多相关主题的帖子: 初级 冒泡 经典 菜菜 
2010-10-03 16:04
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:6 
程序代码:
#include <stdio.h>
#include <stdlib.h>
main()
{
  int ctr,inner,outer,didSwap,temp;     /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
  int nums[10];                         /*定义整型数组为10个元素,存放以下的随机*/
  for (ctr=0;ctr<10;ctr++)
    { nums[ctr]=(rand()%99)+1; }        /*利用rand()函数产生随机数,%99表示产生随机数不超过三位数*/
  printf("\nHere is the list befor the sort:");   /*排列之前*/
  for (ctr=0;ctr<10;ctr++)
    { printf("\n%d",nums[ctr]); }        /*在显示屏上输出由上面随机产生的数字,并每输出一个换行*/
/*以下才是重点,也是算法所在*/
  for (outer=0;outer<9;outer++)      /*执行9次外循环,目的是每一个数字都能与相邻的数字作大小比较*/
    { didSwap==0;//疑问一?应该改成=吧
      for (inner=outer;inner<10;inner++)  /*以下自己好好去体会吧!!慢慢悟~~~~*/
        { if (nums[inner]<nums[outer])
            { temp=nums[inner];
              nums[inner]=nums[outer];
              nums[outer]=temp;
              didSwap==1;//同疑问2
             }
          }
        if (didSwap==0)
          { break; }
      }
  printf("\nHere is the list after it is sorted:");  /*排列之后*/
  for (ctr=0;ctr<10;ctr++)
    { printf("\n%d",nums[ctr]);}
  getch();
}       
还有貌似还要加个<time.h>头文件吧                    
2010-10-03 16:31
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:6 
我整理了一下代码,加了个随机初始化,把这个代码的严重错误找了出来,请自己运行一下吧
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int ctr, inner, outer, temp;           /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
   
int nums[100];                              /*定义整型数组,存放以下的随机数*/
   
int n_nums = 10;
    srand(3); /*srand((unsigned)time(NULL)); /* 初始化随机数,使用srand(3)使出现结果固定 */
   
for (ctr=0; ctr < n_nums; ctr++)
    {
        nums[ctr] = rand() % 99 + 1;                /*利用rand()函数产生随机数,%99表示产生随机数不超过三位数*/
   
}
    printf("\nHere is the list befor the sort:");   /*排列之前*/
   
for (ctr=0; ctr < n_nums; ctr++)
    {
        printf("\n%d", nums[ctr]);               /*在显示屏上输出由上面随机产生的数字,并每输出一个换行*/
   
}
    /*以下才是重点,也是算法所在*/
   
for (outer = 0; outer < n_nums - 1; outer++)   /*执行n_nums-1次外循环,目的是每一个数字都能与相邻的数字作大小比较*/
   
{
        int didSwap = 0;
        for (inner = outer; inner < n_nums; inner++) /*以下自己好好去体会吧!!慢慢悟~~~~*/
        
{
            if (nums[inner] < nums[outer])
            {
                temp = nums[inner];
                nums[inner] = nums[outer];
                nums[outer] = temp;
                didSwap = 1;
            }
        }
        if (didSwap == 0)
        {
            break;
        }
    }
    printf("\nHere is the list after it is sorted:");  /*排列之后*/
   
for (ctr=0; ctr < n_nums; ctr++)
    {
        printf("\n%d", nums[ctr]);
    }
    scanf("%*s");
    return 0;
}   /*俺测试通过,有兴趣的话也试试吧!!~~*/


既然楼主是打算把代码发给新人看的,那最好对你的代码负责一下

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-04 01:15
菜虫编编
Rank: 1
等 级:新手上路
帖 子:18
专家分:1
注 册:2010-10-3
收藏
得分:0 
不好意思,didSwap那里确实是错了,我大意了~!
有个问题是:为什么还要加<time.h>头文件?????

心境决定环境,想法决定活法,思路决定出路!
2010-10-04 19:24
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
因为你用了srand和rand函数啊
2010-10-04 19:30
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
楼主的代码的算法是错的,怎么错,可以参见我发的关于冒泡的帖子

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-04 19:31
菜虫编编
Rank: 1
等 级:新手上路
帖 子:18
专家分:1
注 册:2010-10-3
收藏
得分:0 
除了didSwap变量错外,好像没啥问题吧!
再者,虽然这种思路跟算法不是很好,也不是最优的,但适合给初学者只供参考。
再再者,初学者还不会结构体、定义函数的用法,正所谓一步一个脚印嘛!~~

心境决定环境,想法决定活法,思路决定出路!
2010-10-05 18:56
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
你真的没有运行我在3楼给的代码吗?如果这代码给初学者用,用了发现排序结果是错的,那怪谁呢?

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-05 19:01
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
并且,有一个更大的BUG,这根本不是冒泡排序,你根本比较的不是相邻的两个数,更像是选择排序,但要说是选择排序,那这代码也不对呢

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-05 19:03
菜虫编编
Rank: 1
等 级:新手上路
帖 子:18
专家分:1
注 册:2010-10-3
收藏
得分:0 
回复 6楼 御坂美琴
给点初学者的空间行不?偶看了版主的帖子,一下 子整那么多高水平的东西,咋看?俺的就不一样,虽然算法、思路粗糙,登不上大堂,但最适合初入门的菜菜们!~~~

心境决定环境,想法决定活法,思路决定出路!
2010-10-05 19:04
快速回复:初学者之经典1——冒泡排序(适合最最初级的菜菜们)
数据加载中...
 
   



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

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