冒泡排序 C语言解析

一、冒泡排序简介

        我们从一个题目来进入冒泡排序的解析中,当有一个数组为 {  6,0,2,4,3,5,1},我们想要把数组中的元素按照从小到大的顺序排列,这时候冒泡排序就派上了用场。

二、冒泡排序原理 

        从左到右进行排序,从0的位置偏移量开始,相邻元素进行比较,当前一个元素比后一个元素大时,他们的位置进行互换,当比较一轮过后,就会找到数组中的最大值或最小值。

 这里以上述的数组  {  6,0,2,4,3,5,1} 作为举例:

                            

以此类推,最后找到数组的最大值置于数组的末尾处。这里需要注意的是,当我们第一轮比较过后,得到数组中的最大值在数组的末尾处,这时候进行其他元素比较的时候,末尾处的最大值就不用参与比较,每进行一轮,就说明有一个数字已经排序完成,不用继续参与比较。

 第二轮比较示例:

当第二轮比较完成,意味着5和6已经确定了位置,无需再进行比较。 

三、C语言代码解析 

#include<stdio.h>
int main()
{
	int arr[7] = { 6,0,2,4,3,5,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
    //计算数组的长度  =  数组总大小/数组一个元素的大小  单位为字节
	int j, i;
	printf("排序前的数组:");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	for (i = 0; i < sz - 1; i++)//比较的总轮数为数组的长度-1 是因为不用与自己比较,所以比的数就少一个
	{
		for (j = 0; j < sz - 1 - i; j++)	//size-1-i是因为每一趟就会少一个数比较
		{
			if (arr[j] > arr[j + 1])//升序排法
			{
				int tem = arr[j];   //对数组中的元素值进行暂存
				arr[j] = arr[j + 1];//位置互换
				arr[j + 1] = tem;
			}
		}
	}
	printf("\n排序后的数组:");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

最后结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值