标题:初学者之经典1——冒泡排序(适合最最初级的菜菜们)
只看楼主
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
得分:0 
学习的来了。。
2010-10-06 16:54
丶AnG
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2010-10-6
得分:0 
运行了还是错误的。
2010-10-06 17:43
执C不悟
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2010-6-19
得分:0 
御坂斑竹
你那是什么算法?
2010-10-06 20:08
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int ctr, inner, outer, temp;           /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
    int nums[10];                              /*定义整型数组,存放以下的随机数*/
    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;
}   /*俺测试通过,有兴趣的话也试试吧!!~~*/

这是选择排序法,定义整型数组时分配内存太大。数组的值是随机分配的。

[ 本帖最后由 以中 于 2010-11-19 22:17 编辑 ]

道之所存,师之所存。
2010-10-06 21:45
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int ctr, inner, outer, temp;           /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
    int nums[10];                              /*定义整型数组,存放以下的随机数*/
    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 < 9; outer++)   /*执行n_nums-1次外循环,目的是每一个数字都能与相邻的数字作大小比较*/
    {
       /* int didSwap = 0; */
        for (inner = outer; inner < 10; inner++) /*以下自己好好去体会吧!!慢慢悟~~~~*/
        {
            if (nums[outer]>nums[inner]  )
            {
                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;
}   /*俺测试通过,有兴趣的话也试试吧!!~~*/


选择排序法:小的数都往上面泡,就像吹泡泡
冒泡法:大的数都往下面沉,就像丢了石头到水里那样。


[ 本帖最后由 以中 于 2010-11-19 22:16 编辑 ]

道之所存,师之所存。
2010-10-06 22:31
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int ctr, inner, outer, temp;           /*定义整型变量,分别为ctr,inner,outer,didSwap,temp*/
    int nums[10];                              /*定义整型数组,存放以下的随机数*/
    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 < 9; outer++)   /*执行n_nums-1次外循环,目的是每一个数字都能与相邻的数字作大小比较*/
    {
       /* int didSwap = 0; */
        for (inner = 0; inner < 10-outer; inner++) /*以下自己好好去体会吧!!慢慢悟~~~~*/
        {
            if (nums[inner+1]<nums[inner]  )
            {
                temp = nums[inner];
                nums[inner] = nums[inner+1];
                nums[inner+1] = 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;
}   
这是典型的冒泡法;

起泡法:小的数都往上面飘,就像吹泡泡。
冒泡法:大的数都往下面沉,就像丢了石头到水里那样。
[color=#3dee11]

[ 本帖最后由 以中 于 2010-11-19 22:19 编辑 ]

道之所存,师之所存。
2010-10-06 23:07
哭死我了
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2010-9-23
得分:0 
爱,完全看不懂啊,想哭了
2010-10-07 11:00
哭死我了
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2010-9-23
得分:0 
爱,完全看不懂啊,想哭了
2010-10-07 11:01
chao41091153
Rank: 2
等 级:论坛游民
帖 子:39
专家分:33
注 册:2010-5-26
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
void sort(int *,int );
main()
{
      int a[10],i;
      for(i=0;i<10;i++)
          scanf("%d",&a[i]);
      sort(a,10);
      for(i=0;i<10;i++)
          printf("%d ",a[i]);
      getch();
}
void sort(int *pa,int c)
{ 
    int i,j,k;
    for(i=0;i<c-1;i++)
        for(j=0;j<c-1-i;j++)
            if(pa[j]>pa[j+1])
            {
                k=pa[j];
                pa[j]=pa[j+1];
                pa[j+1]=k;
            }
}                   
2010-10-24 19:18
ququguoguo
Rank: 2
等 级:论坛游民
帖 子:73
专家分:90
注 册:2010-10-20
得分:0 
我是来围观学习的
2010-10-24 20:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-321919-1-1.html




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

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