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

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

大家好,又见面了,我是全栈君,今天给大家准备了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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 所谓的CS和BS_CS程序

    所谓的CS和BS_CS程序    我们在步入CSharp之后,新接触了CS和BS这两个概念,今天小编就给大家分享一下有关CS和BS的知识,如有雷同不胜荣幸  CS:即Cilent/Sever(客户机/服务器)结构,CS在技术上很成熟,主要特点是交互性强,具有安全的存取模式,响应速度快,利于处理大量数据,但是灵活性不好,管理和维护费用高,通常用于小型局域网络。  BS:即Browser/Sever(浏览器/服务器)结…

    2022年9月8日
    2
  • html导航栏可以展开的下拉菜单,html导航栏下拉菜单如何制作[通俗易懂]

    html导航栏可以展开的下拉菜单,html导航栏下拉菜单如何制作[通俗易懂]html导航栏下拉菜单如何制作发布时间:2020-09-2615:29:13来源:亿速云阅读:88作者:小新小编给大家分享一下html导航栏下拉菜单如何制作,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!我们要说的是html导航栏下拉菜单的制作,先看一个完整的实例代码:.dropdown{position:relative;display:inline-block;}.drop…

    2022年5月28日
    217
  • pycharm激活码 2022.01.13_最新在线免费激活

    (pycharm激活码 2022.01.13)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    151
  • UDP协议支持广播发送数据_tcp协议建立连接的过程

    UDP协议支持广播发送数据_tcp协议建立连接的过程UDP(用户数据报协议)是OSI(OpenSystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。目录什么是UDP协议?UDP协议数据传输原理DatagramPacket类DatagramSocket类UDP协议网络通信客户端服务器程序服务器端程序客户端程序Hello!大家好!我是灰小猿。之前和大家分享了使用TCP协议进行网络通信的过程,想了解的小伙伴可以看我的这篇文章《Java利.

    2022年5月3日
    76
  • 京东面板搭建 青龙面板多容器的安装与使用2022年8月22日

    京东面板搭建 青龙面板多容器的安装与使用2022年8月22日系统环境的准备与Docker的安装首先需要准备一台服务器或VPS,当然自家能够安装Docker的路由器也可以,例如N1或OpenWrt等。代挂http://183.56.232.117:5701/下面以Centos为例国内一键安装Dockersudocurl-sSLhttps://get.daocloud.io/docker|shDocker安装(全家桶-推荐)wgethttps://ghproxy.com/https://raw.githubusercon.

    2022年9月18日
    2
  • java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」

    java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」最近这几天一直在整理Java相关的面试题,“金九银十”是求职的最佳时间,但是现在的“银十”也已经过去了一半的时间,相信现在还在为面试四处奔波的小伙伴已经很疲惫了吧,下面就来减轻你负担,Java线程和线程池相关的面试题整理给大家,减轻你准备面试的负担。丑话说在前面,我“丑”我先说,嘿嘿。因为篇幅有限,所以这次的文章不会包含面试题的所有的内容,在这里求大家点一波关注啦!以后会持续更新哒!1、为什么用线…

    2022年5月22日
    36

发表回复

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

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