冒泡排序的作用:
当我们创建了一个无序数组后,我们要是想让该数组的元素有规律,比如假设让数组成为一个升序数组,此时就可以使用冒泡排序将其元素重新排列,冒泡排序的作用效果如下图:
可以将元素按从小到大的顺序形成升序数组。
思路:
将我们所创建的数组中的元素从第一个元素开始,两两相邻进行比较,如果左边的元素大于右边,将左右两边的元素进行交换,然后继续右移一个元素的字节(即越过一个元素),如此循环往复走过完整一个循环后即可完成一个元素的升序,将这整个过程循环(元素个数-1次)即可使原数组变为一个升序数组。
代码实现:
#include <stdio.h>
//冒泡排序
buble_sort(int* pa, int x)//此处传过来的x是数组的元素个数
{
for (int i = 0; i < x - 1; i++)//先确定趟数,一趟完成一个元素的升序
{
for (int j = 0; j < x - 1 - i; j++)//在一趟内部进行比较交换,这个for搞完一轮后就排好了一个元素
{
if (*(pa + j) > *(pa + j + 1))
{
int tmp = *(pa+j);
*(pa+j) = *(pa+j+1);
*(pa + j + 1) = tmp;
}
}
}
}
//打印排序后的数组
print(int* pa, int x)//此处传过来的x是数组的元素个数
{
for (int i = 0; i < x ; i++)
{
printf("%d ", *(pa + i));
}
}
int main()
{
int arr[10] = { 1,4,8,5,6,9,3,7,10,2 };
int sz = sizeof(arr) / sizeof(arr[0]);//sz为数组的元素个数
buble_sort(arr,sz);//将数组进行冒泡排序
print(arr, sz);//打印数组
return 0;
}
代码实现如上:
但是我们在排序时,原数组可能只有一两个元素是需要排序的,但是这时如果我们还这样进行排序的话,要排序的元素很快就能排完,但后面程序还会运行浪费时间,因此我们可以对算法进行优化,优化后的冒泡排序代码如下:
此处通过flag对代码进行了优化,当数组已经为升序数组时可以直接通过flag判定退出循环,不需要等待循环全走完后结束。