标题:排序方法-冒泡法
取消只看楼主
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
结帖率:100%
 问题点数:0 回复次数:5 
排序方法-冒泡法
冒泡法1                                                                     
程序代码:
#include <stdio.h>
void main()
{
    int a,b,c,d[10]={2,5,29,80,70,63,82,39,11,1};
    int t=0,e=0;
    for(a=0;a<10;a++)
     for(b=0;b<9-a;b++,t++)
     if(d[b]>d[b+1])
        {
            printf("第%d次:%d>%d\n",++e,d[b],d[b+1]);
            c=d[b];
            d[b]=d[b+1];
            d[b+1]=c;
        }
    for(a=0;a<10;a++)
    printf("%4d\n",d[a]);
    printf("总循环%d次",t);
}


[此贴子已经被作者于2019-9-7 10:56编辑过]

搜索更多相关主题的帖子: 冒泡法 for 排序 printf 方法 
2019-09-04 16:13
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
回复 4楼 沐涼
之前在学校里学C语音用的编译器直接写main(),运行完也没有错误提示,但在自己下载的编译器上运行总是提示错误需要添加函数类型。学校里学的不是特别全面,有些巧合,如果没有结合其他资料,经常会有各种“错误”。
2019-09-05 08:14
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
回复 6楼 rjsp
就是说主函数main()不能写成void main(),要写成int main()么,这个没有特别的清楚认识。
因为在自定义函数中给出了void类型,可以不用写返回语句return ,所以只要不需要返回值的函数都直接定义为void了。
2019-09-05 13:29
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
冒泡法2
程序代码:
#include <stdio.h>
#define S 10
#define C compare
int main()
{
    int C(int *,int *);
    int a,b,c,e,t;
    int d[S]={4,1,2,11,29,39,53,70,88,82};
    for(a=0,t=0;a<S/2;a++)
    {
     for(b=a,e=0;b<S-1-a;b++)
     {
         e+=C(&d[b],&d[b+1]);   //大数上升
         e+=C(&d[a],&d[b]);    //小数下沉
         t++;
     }
     if(e==0)        //数组元素未发生交换,结束循环
      break;
    }
    printf("从小到大依次排序为:\n");
    for(a=0;a<10;a++)
     printf("%4d",d[a]);
    printf("\n总循环%d次",t);
    return 0;
}
int C(int *a,int *b)
{
    int c=0;
    if(*a>*b)
    {
        c=*a;
        *a=*b;
        *b=c;
        c=1;
    }
    return c;
}
2019-09-06 17:54
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
冒泡法2-2 (加入了些新学到的东西)
程序代码:
#include <stdio.h>
#define S 10                        //数组内元素个数
#define Point_A                     //隐藏或显示.(条件编译)
int main()
{
    int C(int *,int *);
    int d[S]={0,1,2,11,29,39,53,70,80,90};
    int a,b,c,t,e;
    int *p=d;
    e=1;   //判断e的值:e=1时,数组元素有交换;e=0时,数组排序完成。
    t=0;   //循环计算。
    for(a=0;e>=1;a++)
     for(b=a,e=0;b<S-1-a;b++)
     {
         t++;
         #ifdef Point_A              //条件编译.
         e=C(p+b,p+b+1)+C(p+a,p+b);  //方法0:通过指针指向数组,据说比方法1效率更高
         c=0;
         #else                       //方法1:直接使用数组元素
         e+=C(&d[b],&d[b+1]);//大数上升
         e+=C(&d[a],&d[b]);//小数下沉
         c=1;
         #endif
     }
    printf("方法%d:\n",c);
    printf("从小到大依次排序为:\n");
    for(a=0;a<10;a++)
     printf("%4d",d[a]);
    printf("\n总共循环%d次。",t);
    return 0;
}
int C(int *a,int *b)
{
    int c=0;
    if(*a>*b)
    {
        c=*a;
        *a=*b;
        *b=c;
        c=1;
    }
    return c;
}


[此贴子已经被作者于2019-9-8 09:50编辑过]

2019-09-07 17:53
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
回复 10楼 沈和
这个我们的思路有些不同,不过我的注释是有些简略,没有指定数组那头是上那头是下。
不过注释的作用,只是作为参考,方便程序的理解。
2019-09-08 09:03



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




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

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