C语言入门--------冒泡排序

      冒泡排序算法思想:两两相邻的元素进行比较,并且有可能的话进行交换,  假设现在有一组数据:5 1 4 2 8   现在要对这组数据进行升序排列。我们利用冒泡排序的思想。

第一趟:5 1 4 2 8--->1 5 4 2 8--->1 4 5 2 8--->1 4 2 5 8--->1 4 2 5 8

 一趟冒泡排序解决一个数字,第一趟解决8后,剩余的待排序的数字为1 4 2 5 (8)<对8 不进行排序,因为第一趟已经把它排到应该排序的位置> 接下来,进行第二趟排序:

第二趟:1 4 2 5 (8)--->1 4 2 5 (8)--->1 2 4 5 (8)--->1 2 4 5 (8)

第二趟冒泡排序解决了数字5,剩余的待排序的数字是1 2 4 (5) (8)

第三趟:1 2 4 (5) (8)--->1 2 4 (5) (8)--->1 2 4 (5) (8)

 第三趟冒泡排序解决了数字4,剩余的待排序的数字是1 2 (4) (5) (8)

第四趟:1 2 (4) (5) (8)--->1 2 (4) (5) (8)

         通过以上分析,我们可以看到 5 个数字进行了 4 趟冒泡排序之后,才达到了我们想要的效果。如果有n个数字,我们需要n-1趟冒泡排序。

        而我们又发现,在第1趟排序中,5个数字待排序,我们进行了4次比较,在第2趟冒泡排序中,有4个数字待排序,我们进行了3次比较,由此我们可以得出在第 k 趟中,我们需要进行n-k次比较。

通过以上分析,我么可以用代码实现:

void bubble_sort(int* arr,int sz)
{
	int i = 0;
	for (i = 0; i <= sz - 1; i++)//确定趟数
	{
		//一趟冒泡排序的过程
		int j = 0;
		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;

			}//升序 - 前面大于后面需要进行交换
		}
	}
}
int main()
{
	int arr[] = { 5,1,4,2,8 };
	//确定趟数 - 趟数和元素个数有关,所以我们需要求元素个数
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);//冒泡排序 - 排序为升序
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

 以上程序的运行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值