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

昆明小程序开发制作公司电脑优化软件推荐

昆明小程序开发制作公司,电脑优化软件推荐,网站优化需求,网站开发工具推荐文章目录 一、排序概念 1.1 概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。 1.2 常见的排序算法 二、实现常见的排序算法 2.1 直接插入排序 void InsertSort(int* arr, …

文章目录


一、排序概念

1.1 概念

  • 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。

1.2 常见的排序算法

 

二、实现常见的排序算法

2.1 直接插入排序

void InsertSort(int* arr, int n)
{for (int i = 0; i < n - 1; i++){int end = i;int tmp = arr[end + 1];while (end >= 0){if (arr[end] > tmp){arr[end + 1] = arr[end];end--;}else{break;}arr[end + 1] = tmp;}}
}

  • 当插⼊第 i(i>=1) 个元素时,前⾯的 array[0],array[1],…,array[i-1] 已经排好序,此时array[i] 的排序码与 array[i-1],array[i-2],… 的排序码顺序进⾏⽐较,找到插⼊位置即将 array[i] 插⼊,原来位置上的元素顺序后移:

直接插⼊排序的特性总结
  1. 元素集合越接近有序,直接插⼊排序算法的时间效率越⾼
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)

2.2 希尔排序 

void ShellSort(int* arr, int n)
{int gap = n;while (gap > 1){int gap = gap / 3 + 1; //保证最后一次的 gap 是 1。for (int i = 0; i < n - gap; i++){int end = i;int tmp = arr[end+gap];while (end >= 0){if (arr[end] > tmp){arr[end + gap] = arr[end];end-=gap;}else{break;}}arr[end + gap] = tmp;}}
}
  •  希尔排序法⼜称缩⼩增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap = n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。
  • 它是在直接插⼊排序算法的基础上进⾏改进⽽来的,综合来说它的效率肯定是要⾼于直接插⼊排序算法的:

希尔排序的特性总结
  1. 希尔排序是对直接插⼊排序的优化。
  2. gap > 1 时都是预排序,⽬的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序 的了,这样就会很快。这样整体⽽⾔,可以达到优化的效果。
希尔排序的时间复杂度计算
希尔排序的时间复杂度估算:
外层循环:
外层循环的时间复杂度可以直接给出为: O (log 2 n ) 或者 O (log 3 n ) ,即 O (log n )
内层循环:

 

假设⼀共有n个数据,合计gap组,则每组为n/gap个;在每组中,插⼊移动的次数最坏的情况下为
⼀共是gap组,因此:
总计最坏情况下移动总数为:

 gap取值有(以除3为例):n/3 n/9 n/27 ...... 2 1

当gap为n/3时,移动总数为: 
当gap为n/9时,移动总数为:
最后⼀躺,gap=1即直接插⼊排序,内层循环排序消耗为n

因此,希尔排序在最初和最后的排序的次数都为n,即前⼀阶段排序次数是逐渐上升的状态,当到达某⼀顶点时,排序次数逐渐下降⾄n,⽽该顶点的计算暂时⽆法给出具体的计算过程
  • 希尔排序时间复杂度不好计算,因为 gap 的取值很多,导致很难去计算,因此很多书中给出的希尔排序的时间复杂度都不固定。《数据结构(C语⾔版)》--- 严蔚敏书中给出的时间复杂度为:

 

2.3直接选择排序 

  1.  在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据元素
  2. 若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素交换
  3. 在剩余的 array[i]--array[n-2]array[i+1]--array[n-1]) 集合中,重复上述步骤,直到集合剩余 1 个元素
void SlelectSort(int* arr, int n)
{int begin = 0;int end = n - 1;while (begin < end){int min = begin, max = begin;for (int i = begin + 1; i <= end; i++){if (arr[i] < min){min = i;}if (arr[i] > max){max = i;}}if (max = begin){max = min;}Swap(&arr[min], &arr[begin]);Swap(&arr[max], &arr[end]);begin++;end--;}}

 

 

直接选择排序的特性总结:
  1. 直接选择排序思考⾮常好理解,但是效率不是很好。实际中很少使⽤
  2. 时间复杂度: O(N2 )
  3. 空间复杂度: O(1)
     

未完待续~~~

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

相关文章:

  • 岳阳网站建设哪里有推广引流
  • 公司做网站注意什么网络营销八大目标是什么
  • 网站开发前期工作公司网站首页设计
  • 八亿建站谷歌推广代理公司
  • 如何做网站框架百度助手下载
  • 贵阳金阳网站建设公司交换友情链接推广法
  • 政府网站建设的基本原则seo思维
  • 有关网站建设的标题百度新闻官网
  • 南京酒店网站制作同城发广告的平台有哪些
  • 高端建站行业推广营销企业
  • 公司网站与营销网站的区别百度经验app
  • 羊毛网站建设视频运营和营销的区别和联系
  • 网站定制成exe企业网站推广策划书
  • 北京企业官网建设网站优化要多少钱
  • dz做网站缺点谷歌浏览器官网入口
  • 长春建设厅官方网站专业网站优化培训
  • 网站正在建设中的素材动图超级外链自动发布工具
  • 最新科技新闻消息搜索引擎优化seo名词解释
  • 建立旅游公司网站多钱seo是指什么职位
  • 河北共产党员网站两学一做球队积分排名
  • it培训机构专业厦门百度推广排名优化
  • 如何建设平台型的网站推广什么app佣金高
  • 邯郸创建网站要多少钱最新实时新闻
  • 视频变成网站怎么做关键词林俊杰免费听
  • 手机类网站设计免费二级域名生成网站
  • 浅析b2c电子商务网站的建设企业如何做网络推广
  • 政府网站如何建设好淘宝指数转换
  • 如何查找高权重网站b2b
  • 德阳北京网站建设惠州百度推广优化排名
  • 夹江企业网站建设报价成都爱站网seo站长查询工具