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

环保网站建设说明书站长统计app下载免费

环保网站建设说明书,站长统计app下载免费,做网站需要注意的点,个人做购物商城网站会罚款吗目录 本章内容如下 一:插入排序 1.1插入排序 1.2希尔排序 二#xff1a;选择排序 2.1选择排序 三:交换排序 3.1冒泡排序 一:插入排序 1.1直接插入排序 说到排序#xff0c;其实在我们生活中非常常见…目录 本章内容如下   一:插入排序               1.1插入排序     1.2希尔排序     二选择排序      2.1选择排序 三:交换排序       3.1冒泡排序 一:插入排序                       1.1直接插入排序      说到排序其实在我们生活中非常常见比如当我们需要在网上买东西的时候  我们可以按照价格排序也可以按照销量进行排序所以对于我们来说学习排序这个数据结构是非常重要的在本文中我会尽可能按照我的理解将目录中的排序给将清楚。 下面就是我在一个网购网站中进行截取的图片我们可以看到排序无处不见。 现在让我们进入排序的讲解                          首先我们讲解的是插入排序                 首先我们来认识一下插入排序这个算法插入排序顾名思义就是插入到前(n-1)个有序                 数中这就像我们生活中经常玩扑克牌的时候的思想我们玩扑克牌的时候有一种摸牌                 思路就是将第一张牌有序然后让后面的牌进行插入使得我们的牌一直有序。                                    下面我通过一群数字来进行讲解                    比如说我们的数组中的值为   9   4    7   2   5   3   1  6   8                        这9个数字那么我们如何使得这个数组有序呢                      我们通过画图来进行讲解 很明显我们对于插入排序的思想 思路 假设我们要插入第n个数我们需要保证前n-1个数有序然后再进行插入没插入一个数我们就要将该数前面的数与要插入的数经行比较如果大于这个要插入的数那我们就将他玩后面进行移动就可以了。                      void InsertSort(int* a, int n) {//使前n-1个数先有序然后插入第n个数for (int  i 0; i n-1; i){int end i;int tmp a[end 1];//一趟插入排序的思路while (end 0){if (tmp a[end]){a[end 1] a[end];end--;}else{break;}}a[end 1] tmp;} } 现在让我们来算一下插入排序的时间复杂度与空间复杂度吧。                 时间复杂度最好O(N),     最坏O(n^2)                 首先我们不难发现它的空间复杂度为O(1)                 最坏时间复杂度:O(n^2),当一个数组为逆序的时候就是插入排序的最坏的                 情况在这种情况下我们一共有N个数字插入一个数我们就需要将前面的                 数字全部像后面进行移动一次然后在插入所以总共来说就是N*N.                 最好的情况是什么呢最好的情况当然是当数组顺序有序的时候每一个数                 只要插入就行了而不需要移动元素插入的时间复杂度为O(1),所以总共                 的时间复杂度为O(1*N)O(N). 1.2希尔排序      其实希尔排序的本质也是插入排序希尔排序只是在插入排序上进行的一个优化的             排序我们在上面的插入排序中不难发现当数组有序的时候我们的插入排序的             时间复杂度是非常好的为O(N),而我们的希尔大佬就是看到了这个特点             所以就在插入排序中进行了优化才有了我们著名的一个排序算法叫做希尔排序。        希尔排序的思想是什么呢                 其实希尔排序的思想其实也非常简单 先预排序在直接插入排序。                 1先对数组进行多组预排序使得数组中的一些子数组接近有序。                 2在对数组进行插入排序。             我们用图来讲解一组预排序 我们不难看出在进行一组预排序完成后我们的数组相对于原来的数组就接近有序了          且gap越小的时候我们的数组越接近有序当gap1的时候我们的我们的预排序          就是直接插入排序。                    代码如下                                 //版本一 void ShellSort(int* a, int n) {int k 0;int gap n;while(gap!1){gap / 2;//最后一次gap一定等于1//多组预排序也就是我们图中红黑绿三组进行预排序for (int j 0; j gap; j){//一组预排序操作for (int i 0; i n - gap; i gap){int end i;int tmp a[end gap];while (end 0){if (tmp a[end]){a[end gap] a[end];end - gap;}else{break;}}a[end gap] tmp;}}}}c 版本二有点像优化的版本 void ShellSort(int* a, int n) {int k 0;int gap n;while(gap!1){gapgap/3 1;//最后一次gap一定等于1    //间距为gap的值从前往后直接进行交换for (int i 0; i n - gap; i ){int end i;int tmp a[end gap];while (end 0){if (tmp a[end]){a[end gap] a[end];end - gap;}else{break;}}a[end gap] tmp;}}} 希尔排序的时间复杂度是多少呢          其实书上也没有给出明确的证明有很多种不同的看法,但是差不多是O(N^1.3)这个我也不会证明需要涉及到高阶的数学。        大家如果有兴趣的话可以去证明一下。 到这里我们的插入排序就讲解完毕了希尔排序需要大家自行的去画图多思考。          --------     二:选择排序               其实我们的选择排序有两种一种是直接选择排序也是我们讲解的排序还有一种就是堆排序而堆排序我们之前已经讲解过了如果你还没看的话建议先直接去补一下。 堆排序链接https://blog.csdn.net/2201_75964502/article/details/133017420?spm1001.2014.3001.5501     在这里我们主要讲解选择排序的优化版本就是我们遍历一边数组选出两个值         一个最大值我们往后面插入还有一个最小值玩前面插入。         直到我们将数组排序好就可以了。         思想遍历一遍选最大值与最小值然后排序就行了。         图这里只写了1个步骤 代码如下              void SelectSort(int* a, int n) {int begin 0;int end n-1;while (begin end){int maxi begin;int mini begin;for(int i begin;iend;i){//选最小的下标if (a[mini] a[i]){mini i;}//选最大的下标if (a[maxi] a[i]){maxi i;}}Swap(a[begin], a[mini]);//防止最大值就在begin处if (begin maxi){maxi mini;}Swap(a[maxi], a[end]);begin;end--;} } 选择排序的时间复杂度O(^2)           因为它的时间复杂度算法是一个等差数列(n)(n-2)_......20           每次都需要遍历数组选两个值固定的         所以选择排序是很稳定的。 ------- 三交换排序 其实我们的交换排序也有两种一种是快速排序另外一种就是我们本章所讲解的         冒泡排序而我们的快速排序由于有几种方法且有点难所以我会独自整理成一篇         文章来进行讲解我们的快速排序。                      其实冒泡排序可能是我们见过最多的一种排序它的思想并不难理解             冒泡排序的思想是什么呢             思想                 遍历一遍数组两两相邻的元素进行比较将数组中最大元素的值给冒到最                 后去一直遍历直到数组变成有序的数组                                  代码如下                  void BubbleSort(int* a, int n) {int i 0;//一共冒泡几趟for (int  i 0; i n-1; i){int exchange 1;//一趟内部for (int j 0; j n-i-1; j){if (a[j] a[j 1]){exchange 0;Swap(a[j], a[j 1]);}}if (exchange 1){//说明原数组有序,就不需要进行排序了break;}}} 冒泡排序的时间复杂度O(N^2)     它非常稳定。因为时间复杂度是固定的 感谢大家的观看如果你觉得对你有帮助的话可以给博主一个赞哦
http://www.yutouwan.com/news/24937/

相关文章:

  • 上海网站建设设计公司电商平台app定制开发
  • 美食网站开发方案广告宣传片制作公司广告视频
  • 保定网站建设网页传奇怎么制作
  • 湘西北京网站建设做放单网站
  • 设计营销型网站域名wps怎么做网站
  • 专业做网站套餐广东省城乡建设部网站首页
  • 中山做网站哪家公司好汉口企业制作网站的
  • 网站建设拾金手指下拉二十做模特的网站
  • 后台模板链接前台网站郑州平台制作
  • 东港建站公司盐城网站优化工作室
  • 网站是通过超链接万州做网站
  • 网络推广网站首页大图wordpress 引用视频
  • 网站建设项目化教程广东东莞十大特产
  • 网站运营与管理的对策直播间挂人气自助网站
  • 网站建设需要的人员网站制作价目表
  • 网站建设这个工作怎么样建网站需成本多少钱
  • 租个国内服务器做网站多少钱wordpress资讯插件
  • 做ui的网站有哪些内容logo图片大全简单
  • 茶叶响应式网站wordpress 整合js
  • 正规的网站制作哪家好网站配置文件在哪里
  • 做网站服务器什么配置个人网站怎么做百度推广
  • 网站工程师是做什么的访问的网页正在升级中
  • 高端网站建设多少钱湖南郴州建设局网站
  • 新手用jsp做网站wordpress底部主题
  • 深圳比较好的设计网站公司吗免费刷赞网站推广免费
  • 外国网站架构网站开发赚钱方向
  • 大型网站开发企业怎么用WordPress搜索别人
  • 怎样用百度做网站优化大连爱得科技网站建设公司怎么样
  • 湘潭市建设局网站三亚网站建设价格
  • 站长工具手机综合查询网络营销的六大功能