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

网站程序授权怎么做中国和城乡建设部网站

网站程序授权怎么做,中国和城乡建设部网站,衡水移动网站建设费用,商城推广软文范文目录 前言 一、基本原理 1.算法步骤 2.动画演示 3.插入排序的实现代码 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 2.最差时间复杂度 3.平均时间复杂度 2. 空间复杂度 三、插入排序的优缺点 1.优点 2.缺点 四、插入排序的改进与变种 五、插入排… 目录 前言 一、基本原理 1.算法步骤 2.动画演示 3.插入排序的实现代码 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 2.最差时间复杂度 3.平均时间复杂度 2. 空间复杂度 三、插入排序的优缺点 1.优点 2.缺点 四、插入排序的改进与变种 五、插入排序的应用场景 六、总结 前言 插入排序Insertion Sort是一种简单且直观的排序算法常用于小规模数据的排序或作为其他复杂排序算法的一部分如快速排序的小数组优化。 本文将详细介绍插入排序的基本原理、实现代码、时间复杂度及其适用场景帮助你轻松掌握这一算法。 一、基本原理 插入排序的核心思想是将数组分为已排序部分和未排序部分。通过逐一从未排序部分取出元素将其插入到已排序部分的合适位置最终完成排序。 1.算法步骤 1. 从数组的第二个元素开始视为当前需要插入的元素。 2. 从已排序部分的最后一个元素开始比较如果当前元素较小则将已排序部分元素向右移动。 3. 重复上述步骤直到找到插入位置将当前元素插入。 4. 对剩余的未排序部分重复以上步骤直至整个数组有序。 2.动画演示 这里我写了一个程序用来演示直接插入算法的过程。 假如我要进行排序的数据元素分别为53, 862741。 初始的时候我们已排序中的部分中的数据元素使用绿色表示未排序的使用蓝色表示。 图1.初始状态 初始状态下我们把第一个数据元素看做一个已经排列好的部分。 同时把第二个数据元素作为下次要插入的数据元素。 图2.插入排序的动画演示 我们以上面的数组为例看一下具体的过程 53, 862741 1.第一轮 首先确定5是已经排列好的我们将3进行插入操作。将3插入到仅有一个数据元素为5的数组中显然5比3大我们将3插入到5的前面。至此第一轮插入结束。此时的数组为{3,5,8,6,2,7,4,1}。 2.第二轮 在上一轮中已排序的区间为{3,5},现在我们将8拿出来和前面排列好的部分进行比较。因为58,依次已排序区间应该为{3,5,8}。第二轮结束此时排序依然是{3,5,8,6,2,7,4,1}。 2.第二轮 在上一轮中已排序的区间为{3,5},现在我们将8拿出来和前面排列好的部分进行比较。因为58,依次已排序区间应该为{3,5,8}。第二轮结束此时排序依然是{3,5,8,6,2,7,4,1}。 3.第三轮 在上一轮中已排序的区间为{3,5,8},现在我们将6拿出来和前面排列好的部分进行比较。因为86,我们在把6和前面的一个数据元素5比较56把6查到5后面,依次已排序区间应该为{3,5,68}。第二轮结束此时排序依是{3,5,6,8,2,7,4,1}。 4.第四轮 在上一轮中已排序的区间为{3,5,6,8},现在我们将2拿出来和前面排列好的部分进行比较。具体的比较过程和上一轮相同这里不重复了此时排序是{2,3,5,6,8,7,4,1}。 5.第五轮 在上一轮中已排序的区间为{2,3,5,6,8},现在我们将7拿出来和前面排列好的部分进行比较。具体的比较过程和上一轮相同这里不重复了此时排序是{2,3,5,6,7,8,4,1}。 3.第六轮 在上一轮中已排序的区间为{2,3,5,6,7,8},现在我们将4拿出来和前面排列好的部分进行比较。具体的比较过程和上一轮相同这里不重复了此时排序是{2,3,4,5,6,7,8,1}。 3.第三轮 在上一轮中已排序的区间为{2,3,4,5,6,7,8},现在我们将1拿出来和前面排列好的部分进行比较。具体的比较过程和上一轮相同这里不重复了此时排序是{1,2,3,4,5,6,7,8} 3.插入排序的实现代码 以下是插入排序的 C语言实现 #include stdio.h // 插入排序函数 void insertionSort(int arr[], int n) {for (int i 1; i n; i) {int key arr[i]; // 当前要插入的元素int j i - 1;// 将比 key 大的元素向右移动while (j 0 arr[j] key) {arr[j 1] arr[j];j--;}// 插入 key 到正确的位置arr[j 1] key;// 打印当前排序步骤printf(第 %d 步: , i);for (int k 0; k n; k) {printf(%d , arr[k]);}printf(\n);} } int main(int argc, const char * argv[]) {int arr[] {5, 3, 8, 6, 2, 7, 4, 1};int n sizeof(arr) / sizeof(arr[0]);printf(原始数组: );for (int i 0; i n; i) {printf(%d , arr[i]);}printf(\n);// 执行插入排序insertionSort(arr, n);// 打印排序后的数组printf(排序后数组: );for (int i 0; i n; i) {printf(%d , arr[i]);}printf(\n);return 0; } 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 当数组已经有序时每次插入只需比较一次无需移动元素。 2.最差时间复杂度 当数组为逆序时每次插入都需要将所有已排序部分元素向右移动。 3.平均时间复杂度 一般情况下插入排序的性能表现介于最佳和最差之间。 2. 空间复杂度 插入排序是原地排序算法只需常数级别的额外空间空间复杂度为O(1) 。 三、插入排序的优缺点 1.优点 1. 简单直观算法易于理解和实现。 2. 适合小数据集对于小规模数据排序性能较好。 3. 稳定性插入排序是稳定排序算法不会改变相同元素的相对位置。 4. 局部有序优化当数据部分有序时插入排序的性能非常接近线性时间。 2.缺点 1. 效率低下对于大规模数据插入排序的性能较差时间复杂度较高。 2. 多次元素移动在数组为逆序的情况下插入排序需要频繁移动元素效率较低。 四、插入排序的改进与变种 1. 二分插入排序 • 改进点在插入时通过二分查找定位插入位置从而减少比较次数。 • 时间复杂度虽然查找位置优化为 但元素移动次数仍为 。 2. 希尔排序Shell Sort • 基于插入排序的改进版通过引入增量分组的思想对远距离元素进行预排序逐步缩小分组间隔最终变为插入排序。 • 时间复杂度最优可达 。 五、插入排序的应用场景 1. 小规模数据排序在数据量较小时插入排序简单易用且性能尚可。 2. 近乎有序数据插入排序在处理已部分有序的数据时表现优异。 3. 作为复杂排序的辅助算法如快速排序或希尔排序中用插入排序优化小数组的排序效率。 六、总结 插入排序是一种经典的排序算法以其简单性和直观性被广泛应用于教学和小规模排序场景中。虽然它在大数据排序上的性能较差但通过改进如二分插入排序或结合其他算法如希尔排序可以显著提升效率。
http://www.w-s-a.com/news/863923/

相关文章:

  • 网站开发需要什么文凭网站分析的优劣势
  • 海尔网站建设不足之处山东网站营销
  • 楚雄 网站建设广告设计一般人能学吗
  • 热搜榜排名前十山东seo多少钱
  • 衡水哪有建网站的吗企业信息系统英文
  • 有模板怎么建站wordpress媒体库图片路径
  • 怎么做网站h汉狮企业网站营销的实现方式
  • 新津县建设局网站怎么做区块链网站
  • 网站设计与制作是什么专业广州优化网站
  • 腾讯有做淘宝客网站吗网站开发包
  • 网站整体营销方案网站建设百度贴吧
  • 宣传式网站养生网站模板
  • 临猗网站建设天津做网站哪家服务好
  • 郑州做网站九零后用织梦建设网站的步骤
  • 莱芜网站优化加徽信xiala5江都网站制作
  • 网站开发工具书焦作网站开发公司电话
  • 石狮网站建设报价百度爱采购怎么优化排名
  • 广州网站开发系统如何建设百度网站
  • 免费建立一个个人网站网站流量图怎么做
  • 微信网站建设公司首选网站后台更新 前台不显示
  • 撰写网站专题活动策划方案未成年做网站
  • 免费在线响应式网站自助建站网页设计与网站建设试卷
  • 四川省肿瘤医院搜索优化整站优化
  • 新钥匙建站深圳创业补贴政策2023
  • 建网站需要准备什么网站三个月没排名
  • 网站运营规划网站推广的手段
  • cvm可以做网站服务器吗网片围栏
  • 培训前端网站开发网站开发 群
  • 成都武侯区网站建设wordpress菜单分类目录
  • 牡丹江市西安区建设局网站给公司做的东西放到自己网站上