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

做3d ppt模板下载网站推广运营公司哪家好

做3d ppt模板下载网站,推广运营公司哪家好,嘉兴高端网站建设,辽宁注册公司网站注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…

注:本文以排升序为例

常见的排序算法:

目录:

一 直接插入排序:

1.1 基本思想:

1.2 代码:

1.3 复杂度:

二 希尔排序(直接插入排序的优化):

2.1 基本思想:

2.2 代码:

2.3 复杂度:

三 直接选择排序:

3.1 基本思想:

3.2 代码:

3.3 复杂度:

四 堆排序:


一 直接插入排序:

1.1 基本思想:

直接插入排序是⼀种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到⼀个已经排好序的有序序列中,直到所有的记录插入完为止,得到⼀个新的有序序列。

  • 实际我们玩扑克牌时就用到了这一思想

动图:

https://i-blog.csdnimg.cn/direct/497745179f75471fb4fa306e4985a731.gif

解释:当插入第 i(i>=1) 个元素时,前面的 array[0],array[1],…,array[i-1] 已经排好序,此时⽤ array[i] 的排序码与 array[i-1],array[i-2],… 的排序码顺序进行比较,找到插入位置即将 array[i] 插入,原来位置上的元素顺序后移。

1.2 代码:

//直接插入排序
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;}
}

end:指向有序序列的最后一个数据:初始为0,末态为n-2

tmp:有序序列后的第一个待排序数据:初始为1,末态为n-1

以一次循环为例:
将tmp与end位置数据进行比较,

    若end处更大,将end位置数据移到end+1处,end--,继续让end-1处数据与tmp比较
    否则直接跳出循环,此时end+1位置为空,需要放入tmp

最坏的情况:当end为0处数据移到end为1处,此时end变为-1,需要跳出循环,并将tmp放到0处

1.3 复杂度:

元素集合越接近有序,直接插入排序算法的时间效率越高。
1.时间复杂度:O(N^2)

2.空间复杂度:O(1)

二 希尔排序(直接插入排序的优化):

在直接插入排序中我们发现,元素越无序,直接插入排序算法时间效率越低(因为比较次数越多)。特别是当数组为降序,我们要排升序,此时数组的相对无序程度达到了最大,时间复杂度也到了最大。所以D.L.Shell在1959年提出了希尔排序。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

        插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。

        但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。

2.1 基本思想:

        希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把 待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进行插入排序,当gap=1时,就相当于 直接插入排序。它是在直接插入排序算法的基础上进行改进⽽来的,综合来说它的效率肯定是要⾼于直接插入排序算法的。

以排序数组为例:

2.2 代码:

//希尔排序
//希尔排序时间复杂度大约为:O(n^1.3)
void ShellSort(int* arr, int n)
{int gap = n;//6while (gap > 1){gap = gap / 3 + 1;//保证最后一次gap一定为1for (int i = 0; i < n - gap; i++){int end = i;//n-gap-1int tmp = arr[end + gap];while (end >= 0){if (arr[end] > tmp){arr[end + gap] = arr[end];end -= gap;}else {break;}}arr[end + gap] = tmp;}}
}

直接插入排序法的改进,其在许多地方有相似之处:

    一次预排序
        从下标为0的元素开始,每隔gap-1个数据取数据分到一组,从取数据的方式我们可以得出以下结论:
            总共有gap组(0-(gap-1)的元素为每一组的头元素)
            每组有n/gap或n/gap+1个数据

        每一次排序我们排的是end和end+gap(即tmp)处的元素,保证每次排序都是在同一组内排
    end初始为0可得tmp初始为gap,tmp末态为n-1可得end末态为n-1-gap
    在一组内进行的是直接插入排序,只不过把距离从1换为gap,全部换一下就行了,思路是一样的,每次预排序结束后,让gap/3+1,加一保证最后一次排序gap为1,否则无法保证最后一次是直接插入排序

2.3 复杂度:

1.时间复杂度:最好O(N^1.3),最坏O(N^2)

2.空间复杂度:O(1)

三 直接选择排序:

3.1 基本思想:

1.在元素集合 array[i]–array[n-1] 中选择关键码最大(小)的数据元素
2.若它不是这组元素中的最后一个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素交换
3.在剩余的 array[i]–array[n-2](array[i+1]–array[n-1]) 集合中,重复上述步骤,直到集合剩余1个元素

动图:

https://i-blog.csdnimg.cn/direct/7541a586a0fd460ca2f219bd74f36bde.gif

3.2 代码:

void SelectSort(int* arr, int n)
{int begin = 0;int end = n - 1;while (begin < end){int mini = begin;int maxi = begin;for (int i = begin+1; i <= end; i++){if (arr[mini] > arr[i]){mini = i;}if (arr[maxi] <  arr[i]){maxi = i;}}//mini begin//maxi end//避免maxi begini都在同一个位置,begin和mini交换之后,maxi数据变成了最小的数据if (maxi == begin){maxi = mini;}Swap(&arr[maxi], &arr[end]);Swap(&arr[mini], &arr[begin]);--end;++begin;}
}

1.每次在剩余序列中找最大的和最小的,最大的交换至后面,最小的交换至前面

2.

进入循环,mini找到1,maxi还是在9,此时我们将再将mini和begin交换,maxi与end交换,

end++,begin–跳出循环,排序完成仍然是931,出现了问题。所以需要

if (maxi == begin){maxi = mini;}

这样当我们将mini和begin交换完成后,maxi所指向的仍然是最大的数据,将其再与end交换

3.3 复杂度:

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

2.空间复杂度:O(1)

四 堆排序:

堆排序是指利⽤堆积树(堆)这种数据结构所设计的⼀种排序算法,它是选择排序的⼀ 种。它是通过堆来进⾏选择数据。需要注意的是排升序要建⼤堆,排降序建⼩堆。

在 【数据结构篇】顺序结构二叉树(堆)的堆排序已经讲过了此方法,这里就不赘述了。

以上就是【数据结构篇】排序1(插入排序与选择排序)的全部内容,欢迎指正~ 🌹🌹🌹

码文不易,还请多多关注支持,这是我持续创作的最大动力!

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

相关文章:

  • 大鹏网站建设建站好不好seo公司系统
  • 河南省住房和城乡建设工程信息网百度seo排名
  • 网站建设罒金手指下拉壹陆app推广拉新接单平台
  • o2o电子商务网站建设陕西seo
  • 企业建站为什么选择网站定制品牌推广思路
  • 外国做ppt的网站百度推广怎么优化排名
  • 做网站需要学js吗南京seo公司教程
  • 直播代运营收费多少seo岗位职责
  • 北京市工程建设交易信息网站网络营销策划方案的目的
  • 国外网站关键词广告投放这个工作难不难做
  • 使用免费的代码做网站会计培训班要多少钱
  • 电子商务网站建设与管理小论文杭州seo公司服务
  • 做简历的网站有哪些网站优化策略分析
  • 企业做网站的好处是什么谷歌搜索入口365
  • 电脑经销部开具网站建设费百度seo优化方案
  • 如何自学制作网站公司网络营销推广软件
  • 东风地区网站建设公司关键词seo排名优化推荐
  • 商城网站建设快速服务广告软文小故事800字
  • 自己做网站要花钱吗新闻源软文发布平台
  • 洛阳有做网站开发的吗零售客户电商网站
  • 网站建设实训报告doc51链
  • 青岛公司建设网站营销公司
  • 昆明做烤瓷牙哪去柏德L网站关键词投放
  • 太原网站建设公司哪家好长沙靠谱的关键词优化
  • 网站建设与维护视频教程嘉兴seo外包公司费用
  • 网络教育网站建设方案自动点击器下载
  • 个人网站-个人主页作业如何做好营销推广
  • 呼市做网站淘宝seo搜索引擎优化
  • 广州网站建设q.479185700棒360优化大师软件
  • 医院网站 功能上海百度推广优化排名