一、冒泡排序简介
我们从一个题目来进入冒泡排序的解析中,当有一个数组为 { 6,0,2,4,3,5,1},我们想要把数组中的元素按照从小到大的顺序排列,这时候冒泡排序就派上了用场。
二、冒泡排序原理
从左到右进行排序,从0的位置偏移量开始,相邻元素进行比较,当前一个元素比后一个元素大时,他们的位置进行互换,当比较一轮过后,就会找到数组中的最大值或最小值。
这里以上述的数组 { 6,0,2,4,3,5,1} 作为举例:
以此类推,最后找到数组的最大值置于数组的末尾处。这里需要注意的是,当我们第一轮比较过后,得到数组中的最大值在数组的末尾处,这时候进行其他元素比较的时候,末尾处的最大值就不用参与比较,每进行一轮,就说明有一个数字已经排序完成,不用继续参与比较。
第二轮比较示例:
当第二轮比较完成,意味着5和6已经确定了位置,无需再进行比较。
三、C语言代码解析
#include<stdio.h>
int main()
{
int arr[7] = { 6,0,2,4,3,5,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
//计算数组的长度 = 数组总大小/数组一个元素的大小 单位为字节
int j, i;
printf("排序前的数组:");
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
for (i = 0; i < sz - 1; i++)//比较的总轮数为数组的长度-1 是因为不用与自己比较,所以比的数就少一个
{
for (j = 0; j < sz - 1 - i; j++) //size-1-i是因为每一趟就会少一个数比较
{
if (arr[j] > arr[j + 1])//升序排法
{
int tem = arr[j]; //对数组中的元素值进行暂存
arr[j] = arr[j + 1];//位置互换
arr[j + 1] = tem;
}
}
}
printf("\n排序后的数组:");
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
最后结果: