计算机科学类专升本复习之“冒泡排序”详解(初稿)
作者:互联网
对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。
以从小到大排序为例,冒泡排序的整体思想是这样的:
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