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

做公司网站的好处重庆网站到首页排名

做公司网站的好处,重庆网站到首页排名,企业网站排名怎么做,苏州建设招聘信息网站欢迎来到繁星的CSDN,本期的内容主要包括冒泡排序(BubbleSort),直接插入排序(InsertSort),以及插入排序进阶版希尔排序(ShellSort)。 废话不多说,直接上正题! 一、冒泡排序 冒泡排序…

        欢迎来到繁星的CSDN,本期的内容主要包括冒泡排序(BubbleSort),直接插入排序(InsertSort),以及插入排序进阶版希尔排序(ShellSort)。

        废话不多说,直接上正题!

一、冒泡排序

        冒泡排序是我们的老朋友了,我们最初模拟实现qsort的时候就是用它来模拟的(尽管qsort的底层原理实际是quicksort,即快排)。

        上代码!

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

        代码相当简单,其思想就是通过两两之间的比较,每一趟都将最大的数据放在数组的最后

        缺点是,冒泡排序的速度相当慢,原因不仅仅在于比较的次数恒定(n*(n+1)/2次),更在于如果数据量庞大,各个数据移动的速度也相当慢。

        实际意义聊胜于无,但却很好地帮我们入门各大排序算法,这是它仍然活跃的意义。

     二、直接插入排序

       我们一般会叫它插入排序,在此加入“直接”二字,是为了区分它和希尔排序。

        插入排序的思路也是较为简单的。

        面对一个有n个元素的数组,如果前n-1个元素都有序,那么第n个元素通过和前面所有元素比较,就能得到该元素在数组中的位置。有一点数学归纳法的思想在里面。

        上代码!

void InsertSort(int* a, int n)
{//  [0, n-1]for (int i = 0; i < n - 1; i++){// [0, n-2]是最后一组// [0,end]有序 end+1位置的值插入[0,end],保持有序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;}
}

        由于一个元素一定有序,所以第一个元素不用排序。而从第二个元素开始,通过比较,不断插入到前面的数组中,使前n项都有序,如此往复,便可使得整个数组有序。

        相比于冒泡排序,插入排序少了大量重复的交换数值的工作,而是一步到位,得到数据的最终位置(尽管时常需要将所有数据后移,但代码中只是赋值,而非交换,效率比冒泡高的多)。

        两者运行时间差别:

        

        (此处数据为10000个)

        尽管如此,我们在实际工作中也很少使用直接插入排序,即使时间比冒泡排序少的多,其时间复杂度仍为O(n^2)。但不得不指出,它仍有应用,后续在快排的时候将会提到。

三、希尔排序

        

        希尔排序是插入排序的优化版本,优化到可以和快速排序一较高下。

        希尔排序主要做两件事:1、预排序。2、插入排序。

        由插入排序的代码可知,当数组越趋近于有序,比较和赋值的次数也越来越少。所以预排序的目的就是使得整个数组接近有序。

        上代码!

void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){// +1保证最后一个gap一定是1// gap > 1时是预排序// gap == 1时是插入排序gap = gap / 3 + 1;for (size_t 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;}}
}

        要点解释:

1、gap代表的含义是,下标相减为gap的元素为一组,进行插入排序。此举的意义是使得O(n^2)的复杂度造成的影响尽可能小,因为a*(n/a)^2小于n^2,a为任意整数。

2、而当gap等于1时再进行排序,就是插入排序了。

3、gap的大小实际上由写代码的人自己决定,没有一定gap越大,或者gap越小的效果最好,但可以确定的是,经过预排序的插排会比直接插排要更快。

4、上述代码中的gap是一个效果较好的gap,可以参照并直接使用。

        本篇内容到此结束,谢谢大家的观看!

        觉得写的还不错的可以点点关注,收藏和赞,一键三连。

        我们下期再见~

        往期栏目:

        一文带你入门二叉树!-CSDN博客

        栈和队列的介绍与实现-CSDN博客

        设计扫雷游戏_扫雷游戏设计-CSDN博客

        

        

http://www.shuangfujiaoyu.com/news/61812.html

相关文章:

  • 大良网站智能推广价格广告优化师工作内容
  • tag 网站备案线下引流推广方法
  • 做网站要学什么软件好广告开户
  • 星巴克网站建设seo服务商排名
  • 自我建设外贸网站海外seo网站推广
  • 建站公司排名 软通如何查看百度搜索指数
  • 网站开发需求说明书模板短视频运营是做什么的
  • org后缀做网站行网页设计制作网站
  • html欧美网站模板汕头网站建设方案推广
  • 公司网站手机版模板绍兴seo排名外包
  • 黄岛开发区做网站的公司百度seo提高排名费用
  • DW怎么做网站下拉菜单网站关键词seo费用
  • paypal网站集成网站推广培训
  • 做网站策划遇到的问题太原搜索排名提升
  • 大连网站建设好的公司外贸独立站推广
  • 萧山好的做网站的公司什么是电商?电商怎么做
  • 怎么判断网站优化过度网络营销推广专家
  • 一个企业该如何进行网络营销seo顾问赚钱吗
  • 中职学校网站建设的厂家无货源电商怎么做
  • 在线网站制作平台seo短期课程
  • 互联网推广销售是做什么的兰州seo优化公司
  • 网站做链接的意义是什么营销型网站建设步骤
  • 网站建设功能模块图沈阳专业网站seo推广
  • 网站建设价格费用博为峰软件测试培训学费
  • wordpress新建菜单设置安卓优化大师旧版本
  • 深圳市建设科技促进中心网站网页设计用什么软件做
  • 专门做母婴的网站有哪些黑帽seo365t技术
  • 衡水电子商务网站建设公司网页设计
  • dede电影网站源码培训心得体会1000字
  • 最新某地方装修门户源码 php装饰公司程序 dede行业网站模板优化营商环境心得体会