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

建设自己网站网站建设汇报书 ppt

建设自己网站,网站建设汇报书 ppt,网站怎么制作教程,网页特效精灵【八大经典排序算法】冒泡排序 一、概述二、思路解读三、代码实现四、优化 一、概述 冒泡排序由于其简单和易于理解,使其成为初学者学习排序算法的首选,也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到…

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

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


在这里插入图片描述


一、概述

冒泡排序由于其简单和易于理解,使其成为初学者学习排序算法的首选,也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到最后。冒泡排序由美国计算机科学家冯·诺伊曼(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.yayakq.cn/news/974805/

相关文章:

  • 乘风专业建站无锡手机网站制作
  • 来年做那些网站能致富重庆建设注册执业中心网站
  • 天津网站制作费用想做分销商有什么平台
  • 做壁纸壁的网站有什么区别wordpress主题yeti1.9.2
  • 在哪做网站建设平面设计图片创意手绘
  • 高大上 网站电商美工素材网站
  • 音乐网站建设的意义法治与安全做讲座网站
  • 张家界酒店网站建设网站建设的空间是什么
  • 河间网站制作什么网站可以做字体效果
  • 闸北区网站建设网页设文档做网站
  • 深圳的网站建设公司三把火注册有限公司需要多少钱
  • 设备网站建设无锡定制网站
  • 网站关键词密这么稀释网页设计软件有哪些
  • 手机编码制网站如何申请域名注册
  • asp做网站策划书特色专业网站建设模板
  • 网站开发怎么做到前后端深圳上市公司一览表
  • 网站域名为个人的公司能备案wordpress 钛媒体
  • 做网站写的代号好跟不好的区别大学广告设计专业
  • 沙井营销型网站建设html5播放器
  • app开发网站南京软件开发公司有哪些
  • 网站建设丿金手指下拉北京市建设教育协会网站
  • 北京做一个网站多少钱大连模板网站制作报价
  • 长安公司网站建设上海房产网签
  • 设计网站的功能有哪些小程序店铺装修教程
  • 做外汇看的网站网络营销成功的品牌
  • 深圳工程招标信息网资源优化网站排名
  • 山西住房城乡建设厅网站商品门户网站解决方案
  • asp 企业网站免费的crm哪个好
  • 张家界建设局网站电话注册城乡规划师考试时间2024
  • 金融企业网站建设网站临时域名