ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机科学类专升本复习之“冒泡排序”详解(初稿)

2022-02-03 00:01:19  阅读:156  来源: 互联网

标签:复习 元素 冒泡排序 num 专升本 数组 排序 比较


对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。

以从小到大排序为例,冒泡排序的整体思想是这样的:

1. 从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。

2. 第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。

3. 以此类推,进行 n-1(n 为数组长度)轮“冒泡”后,就可以将所有的元素都排列好。

整个排序过程就好像气泡不断从水里冒出来,最大的先出来,次大的第二出来,最小的最后出来,所以将这种排序方式称为"冒泡排序"。

文字可能不太好理解,下面正纳闷举个冒泡排序的例子进行说明吧!

第一轮  排序过程

3  2  4  1    (最初)

2  3  4  1    (比较3和2,交换)

2  3  4  1    (比较3和4,不交换)

2  3  1  4    (比较4和1,交换)

第一轮结束,最大的数字 4 已经在最后面,因此第二轮排序只需要对前面三个数进行比较。

第二轮  排序过程

2  3  1  4 (第一轮排序结果)

2  3  1  4 (比较2和3,不交换)

2  1  3  4 (比较3和1,交换)

第二轮结束,次大的数字 3 已经排在倒数第二个位置,所以第三轮只需要比较前两个元素。

第三轮  排序过程

2  1  3  4  (第二轮排序结果)

1  2  3  4  (比较2和1,交换)

至此,排序结束。

//可能这大家都看得懂,就是代码不懂咋写,下面咱们来写一下代码吧!!!

#include<string.h>

int main()

{

    int num[10]={4,8,7,1,5,9,2,0,10,3};//定义一个长度为10的数组,并进行初始化

    int i,j,temp;

    //进行 n-1 轮的冒泡排序法比较!

    //说白一点 就是 两个for循环进行一直比较啊比较  最终筛选出 从左到右依次增大的数

    printf("初始的顺序为:%d",num);

    for(i=0;i<10-1;i++) //这边呢 n=10, n-1=10-1=9

    {

        for(j=0;j<10-1-i;j++) //知道为何要 减去i?   
//因为i是代表已经被筛选到最后面的值,已经不用参与排序了,所以每次都需要减去i

        {

            if(num[j] > num[j+1]) //这个if是为了保证每次在后面的都是大的值,如果不是就进行对调

            {

                temp = num[j];

                num[j] = num[j+1];

                num[j+1] =temp;

            }

        }

    }



    //输出排序后的数组

    //说白一点就是一个for循环,依次给他输出,上面都实现排序了

    print("经过冒泡排序后的顺序为:");

    for(i=0;i<10;i++)

    {

        printf("%d ",num[i]);

    }

    printf("\n");

    return 0;

}

结果为:

经过冒泡排序后的顺序为:0 1 2 3 4 5 7 8 9 10

标签:复习,元素,冒泡排序,num,专升本,数组,排序,比较
来源: https://blog.csdn.net/weixin_51563198/article/details/122773224

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有