ps:第一次写博客有错误欢迎指出。
前言:冒泡排序,是一种计算机科学领域的较简单基础的排序算法。其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。
实现图解
实现思路
冒泡排序法的核心思想就是比较大小然后交换两个元素的位置,如上图所示:
10>>8 比较,10大与8交换位置。(第一个元素和第二个元素比较)
10>>5比较,10大与5在交换位置。(第二个元素和第三个元素比较)
10>>2比较,10大在与2在交换位置。(第三个元素和第四个元素比较)
…以此类推
最后,所有数都和10比较完以后10来到了最后的位置。
如下图所示:
第一轮排序
第二轮首先是数组的第一个元素和第二个元素比较及:
8>>5比较,8大与5交换位置。(第一个元素和第二个元素比较)
8>>2比较,8大与2交换位置。(第二个元素和第三个元素比较)
8>>3比较,8大与3交换位置。(第三个元素和第四个元素比较)
8>>9比较,9大,8位置不动。(第四个元素和第五个元素比较)
9>>6比较,9大与6交换位置。(第五个元素和第六个元素比较)
…以此类推
最后如下图所示:
第二轮排序
总结:每轮比较及找出当前轮次的最大值,如果前面的元素比后面的元素大就交换,
反之则不动。
实现代码
#include<stdio.h>
int main()
{
int arr[10] = { 10,8,5,2,3,9,6,7,4,1 };
//元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int j = 0;
for (i = 0; i < sz-1; i++)//需要排的总轮数。一个数比较排序完为一轮
{
for (j = 0; j < sz-1-i; j++)//每一轮确定一个最大值,每次比较都少一轮。
{
//第一个元素比第二个元素大就交换。
if (arr[j] > arr[j + 1])
{
int tmp = arr[j ];
arr[j ] = arr[j+1];
arr[j+1] = tmp;
}
}
}
//打印每一个元素
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
ps:10个元素排序,如果前面的九个元素已经依次排序完成以后,最后一个元素一定在它那个确定的位置上,也是为什么只需要比较sz-1次;
运行结果