冒泡排序以及其原理

1、冒泡排序的原理;

  • 在了解冒泡排序原理之前我们先引入例子:
    将数组int arr[]={54,63,25,15,2}按数组的元素进行升序或者降序

  • 原理:是将前后数组内的两个元素进行比较(我们这个例子进行升序排序,降序排序原理相同),大的元素位置往后调整,后面元素依次执行。

  • 我们来看一下实现过程:

54 , 63, 25, 15 , 2 >>进行第一次排序:

54 和 63 比较 54< 63 -----------> 54, 63
63 和 25 比较 25 < 63 ----------> 54, 25 , 63
63 和 15 比较 ---------------------> 54, 25, 15, 63
63 和 2 比较 -----------------------> 54, 25 , 15, 2, 63

进行第二次排序

  • 原理和第一次排序原理相同;

25 15 2 54 63

进行第三次排序

15 2 25 54 63

进行第四次排序

2 15 25 54 63

这里我们可以看到整个数组里的元素已经按照升序要求排序完成;
5个元素分步要进行4次排序。

2、每一轮比较代码实现;

//冒泡排序法 将第i个数和i+1个数进行比较,把大的数放在arr[i]里,把小的数放在arr[i+1]里
int main()
{
// 未进行排序前的数组,
	int arr[] = { 54,63,25,15,2 };
	printf("冒泡排序前:");
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		
		printf("%d ", arr[i]);
	}
	//打印为排序前的数组
	printf("\n");



//第一次排序
	printf("第1次排序;\n");
	for (int i = 0; i < (sizeof(arr)/sizeof(arr[0]) - 1); i++){
		if (arr[i] > arr[i + 1]){
			int temp = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = temp;
			//按照大小 把小的元素放在前面,大的元素放在后面
		}
	}
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
//打印第一次排序结果;


//第二次排序
	printf("第2次排序;\n");
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]) - 1); i++){
		if (arr[i] > arr[i + 1]){
			int temp = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = temp;
		}
	}
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		printf("%d ", arr[i]);
	}
//打印第二次排序结果


// 第三次排序
	printf("\n");
	printf("第3次排序;\n");
	for (int i =0; i < (sizeof(arr) / sizeof(arr[0]) - 1); i++){
		if (arr[i] > arr[i + 1]){
			int temp = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = temp;
		}
	}
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
//打印第三次排序结果


//第四次排序
	printf("第4次排序;\n");
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]) - 1); i++){
		if (arr[i] > arr[i + 1]){
			int temp = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = temp;
		}
	}
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
//第四次打印结果


//程序运行结果为
冒泡排序前:54 63 25 15 21次排序;
54 25 15 2 632次排序;
25 15 2 54 633次排序;
15 2 25 54 634次排序;
2 15 25 54 63
请按任意键继续. . .

3、完整代码实现;

int main()
{
	int arr[] = { 54,63,25,15,2 };
	
	printf("冒泡排序前:");
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		
		printf("%d ", arr[i]);
	}
	printf("\n");
		printf("改进后的排序结果:\n");
	for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - 1; j++){
//外层for循环表示需要进行几次排序。此次排序我们需要进行4次排序。
		for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]) - 1); i++){
//内层for循环是进行比较大小以及赋值的单结果
			if (arr[i] > arr[i + 1]){
				int temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
			}
		}
	}
	
	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++){
		printf("%d ", arr[i]);
		//打印数组
	}
	printf("\n");
	system("pause");
	return 0;

}
//运行结果为
冒泡排序前:54 63 25 15 2
改进后的排序结果:
2 15 25 54 63
请按任意键继续. . .

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值