详解冒泡排序

冒泡排序的作用:

当我们创建了一个无序数组后,我们要是想让该数组的元素有规律,比如假设让数组成为一个升序数组,此时就可以使用冒泡排序将其元素重新排列,冒泡排序的作用效果如下图:

可以将元素按从小到大的顺序形成升序数组。

思路:

将我们所创建的数组中的元素从第一个元素开始,两两相邻进行比较,如果左边的元素大于右边,将左右两边的元素进行交换,然后继续右移一个元素的字节(即越过一个元素),如此循环往复走过完整一个循环后即可完成一个元素的升序,将这整个过程循环(元素个数-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判定退出循环,不需要等待循环全走完后结束。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值