开发者社区> 问答> 正文

用C++编写冒泡排序法(每步都要详细解释) 谢谢了

用C++编写冒泡排序法(每步都要详细解释) 谢谢了

展开
收起
知与谁同 2018-07-19 10:51:30 3020 0
4 条回答
写回答
取消 提交回答
  • 我就不写了,思路你能明白就够了。 冒泡的原理是把最大的(或最小的)弄到最边上,然后我们就得到了一个全局的极值。 然后除去这个位置和极值,剩下的再把最大的(或最小的)弄到除了刚才位置的最边上。以此类推直至最后一个。找到极值的方法就是和旁边的值比对,把大的(或者小的)不断移动,最后就排序完成了。

    2020-03-13 14:37:01
    赞同 展开评论 打赏
  • #include "stdio.h"
    #include "stdlib.h"
    /*"malloc.h"*/
    #include "string.h"
    #define NULL 0
    #define LEN sizeof(struct stu)
    struct stu{
    long num;
    char name[20];
    char sex;
    int age;
    float score;
    struct stu *next;
    }*head=NULL;
    struct stu *creat();
    void print (struct stu*);
    main()
    {char flag;
    while(1)
    {getchar();
    printf("c\n");
    flag=getchar();
    switch(flag)
    {
    case'c':head=creat();break;
    default:exit(0);}
    print(head);
    }
    }
    struct stu *creat()
    {
    char c,c0;
    struct stu *head=NULL,*p1,*p2;
    p1=p2=(struct stu *)malloc(LEN);
    printf("输入 num name sex age score\n");
    scanf("%Ld%s%c%c%d%f%c",&p1->num,p1->name,&c0,&p1->sex,&p1->age,&p1->score,&c );
    while(1)
    {
    if(head==NULL) head=p1;
    else p2->next=p1;
    p2=p1;
    if(c=='#')break;
    p1=(struct stu*)malloc(LEN);
    scanf("%Ld%s%c%c%d%f%c",&p1->num,p1->name,&c0,&p1->sex,&p1->age,&p1->score,&c );
    }
    p2->next=NULL;
    return head;}
    void print(struct stu *head)
    {
    struct stu *p;
    p=head;
    printf("num name sex age score\n");
    if(head!=NULL)
    do{
    printf("%Ld %s %c %d %f\n",p->num,p->name,p->sex,p->age,p->score );
    p=p->next;
    }while(p!=NULL);
    }
    2019-07-17 22:50:14
    赞同 展开评论 打赏
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    #include<iostream.h>
    void main()
    {
    int a[20],t; //定义最多给20个数排序
    int n;
    cout<<"请输入有几个数你要排序:";
    cin>>n;
    for(int i=0;i<n;i++)
    {
    cout<<"请输入第"<<i+1<<"个数:";
    cin>>a[i];
    }
    for (i=0;i<n-1;i++)
    {
    for (int d=i+1;d<n;d++)
    if(a[i]>a[d])
    {
    t=a[i];
    a[i]=a[d];
    a[d]=t;
    }
    }
    cout<<"以上"<<n<<"个数由小到大排序为:"<<endl;
    for(i=0;i<n;i++)
    cout<<a[i]<<" ";
    }
    /*冒泡排序也是初学c++的同学必做实验之一,smilediao当时也非常的头痛,心想要是有人
    给个程序例子参考一下就好了,可惜呀...在网上找到的都是用c 写的而且都是经过了很多
    的人的转载总会有一些的错误出现,没有人愿意去给新手写一个完整而又正确简洁的程序,
    smilediao对初学者深表同情,于是就写了一个,供大家参考,我们要的不是鱼,而是钓鱼
    的方法,希望从这个程序中你能总结出你的钓鱼方法。*/
    qq379389449
    2019-07-17 22:50:14
    赞同 展开评论 打赏
  • 给你三种方法 不明白的话再联系我:
    1. 用起泡法把数组中的数从大到小排列
    方法一:
    #include <iostream>
    using namespace std;
    int main()
    {
    int a[10];
    int i,j;
    cout<<"请输入各个数字:"<<' ';
    for(i=0;i<10;i++)
    cin>>a[i];
    for(j=1;j<10;j++)//进行n-1次循环,n-i趟比较
    for(i=0;i<10-j;i++)//每趟进行n-i-j次比较
    { if(a[i]>a[i+1])//相邻两数进行比较
    {
    int t=a[i];
    a[i]=a[i+1];
    a[i+1]=t;
    }

    }
    for(i=0;i<10;i++)
    cout<<a[i]<<' ';
    cout<<endl;
    return 0;
    }

    问题:注意i的条件

    方法二
    #include <iostream>
    using namespace std;
    int main()
    {
    int i,j,a[10]={54 ,7 ,8 ,93, 4 ,33 ,6 ,12 ,28, 0};
    //定义数组a【】并初始化各值
    for(j=1;j<10;j++)
    for(i=0;i<=9-j;i++)
    {
    if(a[i]>a[i+1])
    //对相邻两数进行比较,如果条件成立,交换两数的值,
    {
    int t=a[i];
    a[i]=a[i+1];
    a[i+1]=t;
    }

    }
    for(i=0;i<10;i++)
    cout<<a[i]<<' ';
    cout<<endl;
    return 0;
    }

    方法三
    #include <iostream>
    using namespace std;
    int main()
    {
    int a[100];
    int n,i,j;
    cout<<"请输入要比较的数字个数:"<<' ';
    cin>>n;
    cout<<"请输入各个数字:"<<' ';
    for(i=0;i<n;i++)
    cin>>a[i];
    for(j=1;j<n-1;j++)//进行n-1次循环,n-i趟比较
    for(i=0;i<n-j;i++)//每趟进行n-i-j次比较
    {
    if(a[i]>a[i+1])//相邻两数进行比较
    {
    int t=a[i];
    a[i]=a[i+1];
    a[i+1]=t;
    }

    }
    for(i=0;i<n;i++)
    cout<<a[i]<<' ';
    cout<<endl;
    return 0;
    }
    2019-07-17 22:50:13
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载