如何实现冒泡排序优化,三种优化方式

本文介绍了冒泡排序的基本原理和稳定性,并详细阐述了三种优化方式:双向排序、减少无效扫描以及未发生交换时提前结束。通过这些优化,冒泡排序的效率得到显著提升。
摘要由CSDN通过智能技术生成

一、程序描述
冒泡排序(BubbleSort)简单来讲就是通过对其中的元素按顺序两两进行对比,按照规则不断交换,使得一些元素慢慢被换到后面,就像是水中的气泡慢慢的浮出水面(跑到后面)一样。这是一种简单的基于比较大小的排序算法。冒泡排序利用了不等式传递的思想。

算法原理:如果想把某个数组按照递增顺序排列,那么应该从头开始比较相邻的两个元素,如果后面一个元素比前面一个要大,说明顺序不对,就把他们换个位置,直到所有元素全部交换完成,则排序完成。冒泡排序一般用于初学计算机程序设计的人理解算法。

算法稳定性:如果相等的两个元素相邻,那么根据算法定义不会发生交换,如果相等的两个元素不相邻,那么通过其他的两两交换让他们相邻后也不会发生交换,所以相同元素的顺序不会发生改变,冒泡排序是一种稳定排序算法。

算法优化:
1、冒泡的同时把“水”沉下去。(上浮+下沉)
2、泡泡到顶以后再也不进行扫描。(减少无效扫描)
3、如果检测到一整轮没有发生交换,直接结束排序。

二、程序要点
1、冒泡的同时把“水”沉下去。(上浮+下沉)双向排序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void bubble_sort_down(int arr[], int sz)//冒泡排序,双向扫描
{
   
	int i = 0;
	int t;
	int m;
	for (i = 0; i < (sz)/2; i++)//进行元素个数减一次排序,双向排序中可以让排序次数减半
	{
   
		int flag = 1;//定义一个整型变量一会用来判断if语句
		int j;
		int k;
		for (j = 0; j < sz - 1 - i; j++)//每次排序次数比较次数减少i个,也就是不再对已经上浮到位的元素进行比较
		{
   
			if (arr[j] > arr[j + 1])
			{
   
				t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
				flag = 0;//程序如果没来这,说明这一次扫描没有发生过换位,所以可以直接结束排序
			}
		}
		for (k =
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值