一系列白话经典算法中 三冒泡排序实现

一系列白话经典算法中 三冒泡排序实现

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

 冒泡排序是很easy理解和实现,,以从小到大排序举例:

设数组长度为N。

1.比較相邻的前后二个数据,假设前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,假设N不为0就反复前面二步,否则排序完毕。

 

依照定义非常easy写出代码:

//冒泡排序1
void BubbleSort1(int a[], int n)
{
       int i, j;
       for (i = 0; i < n; i++)
              for (j = 1; j < n - i; j++)
                     if (a[j - 1] > a[j])
                            Swap(a[j - 1], a[j]);
}

以下对其进行优化,设置一个标志,假设这一趟发生了交换,则为true,否则为false。明显假设有一趟没有发生交换,说明排序已经完毕。


//冒泡排序2
void BubbleSort2(int a[], int n)
{
       int j, k;
       bool flag;

       k = n;
       flag = true;
       while (flag)
       {
              flag = false;
              for (j = 1; j < k; j++)
                     if (a[j - 1] > a[j])
                     {
                            Swap(a[j - 1], a[j]);
                            flag = true;
                     }
              k--;
       }
}


再做进一步的优化。假设有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必然小于10,且这个位置之后的数据必然已经有序了,记录下这位置,第二次仅仅要从数组头部遍历到这个位置就能够了。

//冒泡排序3
void BubbleSort3(int a[], int n)
{
	int j, k;
	int flag;
	
	flag = n;
	while (flag > 0)
	{
		k = flag;
		flag = 0;
		for (j = 1; j < k; j++)
			if (a[j - 1] > a[j])
			{
				Swap(a[j - 1], a[j]);
				flag = j;
			}
	}
}

冒泡排序毕竟是一种效率低下的排序方法,在数据规模非常小时,能够採用。数据规模比較大时,最好用其他排序方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117889.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月17日 上午7:00
下一篇 2021年12月17日 上午7:00


相关推荐

  • docker nginx+php(docker nginx反向代理)

    一、docker安装:将微信公众号项目运行绑定至80端口(微信服务器只能和外部开通了80端口的服务器之间通信)docker一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer就类似于一个容器。这个容器就好像咱们常用的虚拟机一样,当我们虚拟机里面安装过VS、SQL、浏览器……之后咱们就把虚拟机镜像备份下来、等到下一次需要重新搭一个环境的时候,就可以省去很多事情了,直接…

    2022年4月16日
    73
  • Fiddler抓取视频数据「建议收藏」

    准备工作:(1)、手机(安卓、ios都可以)/安卓模拟器,今天主要以安卓模拟器为主,操作过程一致。(2)、抓包工具:Fiddel下载地址:(https://www.telerik.com/download/fiddler)(3)、编程工具:pycharm(4)、安卓模拟器上安装抖音(逍遥安装模拟器)一、fiddler配置在tools中的options中,按照图中勾选后点击Actio…

    2022年4月8日
    885
  • activity和task的启动模式有哪些_大数据是需要新处理模式才能具有

    activity和task的启动模式有哪些_大数据是需要新处理模式才能具有启动模式singleTask和FLAGACTIVITYNEWTASK具有不同的行为

    2022年10月6日
    5
  • Debian中文乱码_乱码处理

    Debian中文乱码_乱码处理中文系统虽说不是必须,但是至少要能看、能写汉字,不是么?我也是用终端,突然说用w3m访问页面玩玩,然后,你懂的……      下面就网上信息及自己遇到的问题,直接上步骤和解决方法了:一、要支持区域设置,首先要安装locales软件包:apt-getinstalllocales二、然后配置locales软件包:dpkg-reconfigurelocales在界面中我勾选的

    2022年10月10日
    9
  • 纯Vibe Coding实操!用豆包+Trae开发出时间管理微信小程序

    纯Vibe Coding实操!用豆包+Trae开发出时间管理微信小程序

    2026年3月12日
    2
  • CTF-UPX脱壳加壳讲解;(详细版)

    CTF-UPX脱壳加壳讲解;(详细版)在做CTF-RE题的时候,下载的题目附件会发现缺少函数方法的现象,说明这个文件就被加壳处理了;这个是加壳状态下的;脱壳后~~~~~~~如何发现是加壳的呢?除了开头所描述的方法,还有第二种用ExeinfoPE软件查看附件信息;此时这个软件就提示我们这个附件是UPX加壳处理的;二.脱壳这里我只讲一种方法(因为我只会一种方法-.-)首先下载好打包好的UPX脱壳工具,解压下载好:讲一下用法吧在这个文件夹当中输入cmd进入;输入upx.exe-h有如下反应:

    2022年7月19日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号