其他分享
首页 > 其他分享> > 计算机科学类专升本复习之“冒泡排序”详解(初稿)

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

作者:互联网

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

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

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