冒泡排序

    首先我们分析一下冒泡排序的原理,这里我们以升序为例:

    

如图所示,有一组数11,22,55,88,11,我们从第一个数开始,拿它和后面一个数进行比较,如果这个数比它后面的数大,那么就把它们俩交换,反之,则不需要交换,然后无论需不需要交换都把手里这个数放下,拿着较大的那个数,然后重复上述步骤,直到遍历至倒数第二个数,那么我们就可以将最大的那个数放在它应该在的位置,这样一轮结束后,继续下一轮,大致步骤与之前没什么区别,只不过,这里我们因为最后一个位置已经确定,它已经是有序的了,所以在遍历的时候就不需要考虑了,如此进行反复的步骤,直到没有能拿来比较的数据,或者在这之前这个数组就已经有序了(也就是不在需要进行任意一次交换了),那么排序就完成了。

代码如下:

#include <stdio.h>
#include <windows.h>
void show(int arr[],int len)
{
	int i=0;
	for(;i<len;i++)
	{
		printf("%d ",arr[i]);
	}
	printf("\n");
}
void swap(int* x,int* y)
{
	*x^=*y;
	*y^=*x;
	*x^=*y;
}
void bubble_sort(int arr[],int len)
{
	int i=0;
	for(;i<len-1;i++)
	{
		int count=0;
		int j=0;
		for(;j<len-1-i;j++)
		{
			if(arr[j]>arr[j+1])
			{
				count++;
				swap(&arr[j],&arr[j+1]);

			}
		}
		if(count==0)
		{
			break;
		}
	}
}
int main()
{
	int arr[]={11,22,55,88,11};
	int len=sizeof(arr)/sizeof(arr[0]);
	show(arr,len);
	bubble_sort(arr,len);
	show(arr,len);
	system("pause");
	return 0;
}
运行结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值