当前位置: 首页 > wzjs >正文

公司网站建设服务北京seo公司网站

公司网站建设服务,北京seo公司网站,免费wap自助建站网站,有人模仿qq音乐做的h5网站吗【八大经典排序算法】冒泡排序 一、概述二、思路解读三、代码实现四、优化 一、概述 冒泡排序由于其简单和易于理解,使其成为初学者学习排序算法的首选,也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到…

【八大经典排序算法】冒泡排序

  • 一、概述
  • 二、思路解读
  • 三、代码实现
  • 四、优化


在这里插入图片描述


一、概述

冒泡排序由于其简单和易于理解,使其成为初学者学习排序算法的首选,也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到最后。冒泡排序由美国计算机科学家冯·诺伊曼(John von Neumann)于1945年提出。

冯·诺伊曼是计算机科学和现代计算机体系结构的奠基人之一,他在设计计算机算法时,意识到排序是计算机科学中的一个基本问题。于是,他提出了冒泡排序算法。

冒泡排序的思想是基于比较相邻元素的大小,如果顺序不正确,则交换它们的位置。通过多次遍历数组,每次都将最大的元素“冒泡”到末尾,最终实现整个数组的排序。

二、思路解读

我们知道冒泡排序的基本思想本思想是通过不断交换相邻元素的位置,将最大(或最小)的元素逐步“冒泡”到序列的末尾。(接下来以升序为例)
我们可以从序列的第一个元素开始,依次比较相邻的两个元素的大小。如果前一个元素大于后一个元素,则交换它们的位置,相当于将较大的元素冒泡到后面。然后继续对剩余的元素进行比较和交换,直到最后一个元素,此时最大的元素就成功冒泡到序列的末尾啦。
上述过程我们已经将整个排序中最大的数冒泡到了最尾端,接下啦要做的就是不断重复上述步骤,每次需比较和交换的范围缩小一个元素,直到整个序列有序为止。
 
动画演示:
在这里插入图片描述


三、代码实现

上述思路如何转换为代码呢?(以升序为例)
我们可以通过双重循环来实现。
第一层循环表示要排序的次数。假设我们有n个元素,此时我们只需要排序n-1次,让最后n-1个元素有序,此时剩余的最后一个元素一定是最小的。
第二层排序表示将每次排序中的最大数冒泡到最后。需要注意的是,我们每完成一次排序,待排序的元素个数就少1。

 
【代码】:

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void BubbleSort(int* a, int n)
{//排序n-1次for (int i = 0; i < n - 1; i++){//将最大元素冒泡到最后//为什么边界条件是n-1-i呢?//因为n个数,两两比较,即比较n-1对。同时每排序完i次,待排序的个数就减i。for (int j = 0; j < n - 1 - i; j++){if (a[j] > a[j + 1]){Swap(&a[j], &a[j + 1]);}}}
}

四、优化

上述代码已经可以完整实现一个排序了。但有一个问题,如果我们带排序的数据接近有序呢?比如:
在这里插入图片描述
我们发现只需要简单交换1次即可。但按原来代码所示,一次过后虽然排序已经有序了,但还是要继续比较的。未免太死板了。
所以我们可以在每次排序前多加一个变量flag,每次排序过程中如果有数据交换,就改变flag的值。
最后,我们只需通过判断flag的值是否改变即可判断是否已经有序。如果flag的值没改变(以升序为例),则说明数据中后一项都比前一项大,此时数组有序。

【最终代码】:

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void BubbleSort(int* a, int n)
{for (int i = 0; i < n - 1; i++){int flag = 1;for (int j = 0; j < n - 1 - i; j++){if (a[j] > a[j + 1]){Swap(&a[j], &a[j + 1]);flag = 0;}}if (flag)break;}
}

时间复杂度:O(N^2)
空间复杂度:O(1)

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/wzjs/169895.html

相关文章:

  • 招聘网站建设规划书企业推广是做什么的
  • 如何做批发网站网站怎么做外链
  • 杭州工业设计公司排名前十强襄阳seo
  • java可以用来做网站吗营业推广方案
  • 宝鸡建设网站seo管理是什么
  • 网站服务器地址怎么查询360优化大师下载官网
  • 永州建设公司网站服装店营销策划方案
  • 成都的网站建设开发公司知名的建站公司
  • 作业3 主题资源网站建设谷歌搜索引擎香港免费入口
  • 迁安做网站哪家好如何申请一个网站域名
  • 做网站首选九零后网络宁波网站制作优化服务
  • 网站建设优化服务方案百度认证平台
  • 网站建设独立推广公司app主要做什么
  • wordpress横菜单间隔佛山市seo推广联系方式
  • 新闻发布网站如果做bt蚂蚁磁力
  • 杭州网站推广优化哪里好网页设计需要学什么
  • 网站怎么做内链外链网站建设的推广渠道
  • 青岛网站建设技术托管网站推广找客户
  • 张家港做网站的公司优化公司哪家好
  • dw做框架网站大数据查询个人信息
  • 哪个淘宝客网站最好宁波seo网站推广软件
  • 彩票网站做任务赚钱线上渠道推广有哪些方式
  • 做网站的公司为什么人少了40个免费靠谱网站
  • 网站开发word百度如何发布信息推广
  • 用asp.net做的网站模板下载百度人工客服电话是多少
  • 怎么做网站建设赚钱品牌策划案
  • 小甲鱼网站开发做网站公司哪家正规
  • 做网站需要注意些什么网站访问量
  • 不锈钢餐具做外贸哪个网站好嘉兴seo
  • 网站建设制作公司哪家google play官网下载