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

南京 网站开发合肥商城网站建设地址

南京 网站开发,合肥商城网站建设地址,网站定制设计方案,一级服务器二级服务器大家好#xff0c;我是 方圆。对于小规模数据#xff0c;我们可以选用时间复杂度为 O(n2) 的排序算法#xff0c;因为时间复杂度并不代表实际代码的执行时间#xff0c;而且它也省去了低阶、系数和常数#xff0c;仅代表的增长趋势#xff0c;所以在小规模数据情况下我是 方圆。对于小规模数据我们可以选用时间复杂度为 O(n2) 的排序算法因为时间复杂度并不代表实际代码的执行时间而且它也省去了低阶、系数和常数仅代表的增长趋势所以在小规模数据情况下 O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大 O(nlogn) 的排序算法是不二选择。本篇我们主要对 O(n2) 的排序算法进行介绍在介绍之前我们先了解一下算法特性 算法特性 稳定性经排序后若等值元素之间的相对位置不变则为稳定排序算法否则为不稳定排序算法 原地排序是否借助额外辅助空间 自适应性: 自适应性排序受输入数据的影响即最佳/平均/最差时间复杂度不等而非自适应排序时间复杂度恒定 本篇我们将着重介绍插入排序选择排序和冒泡排序了解即可。 插入排序 插入排序的工作方式像 整理手中的扑克牌一样即不断地将每一张牌插入到其他已经有序的牌中适当的位置。 插入排序的当前索引元素左侧的所有元素都是有序的若当前索引为 i则 [0, i - 1] 区间内的元素始终有序这种性质被称为 循环不变式即在第一次迭代、迭代过程中和迭代结束时这种性质始终保持不变。 不过这些有序元素的索引位置暂时不能确定因为它们可能需要为更小的元素腾出空间而向右移动。插入排序的代码实现如下 private void sort(int[] nums) {for (int i 1; i nums.length; i) {int base nums[i];int j i - 1;while (j 0 nums[j] base) {nums[j 1] nums[j--];}nums[j 1] base;}}它的实现逻辑是取未排序区间中的某个元素为基准数 base将 base 与其左侧已排序区间元素依次比较大小并插入到正确位置。插入排序对 部分有序数组中每个元素距离它的最终位置都不远或数组中只有几个元素的位置不正确等情况的数组排序效率很高。事实上当逆序很少或数据量不大n2和nlogn比较接近时插入排序可能比其他任何排序算法都要快这也是一些编程语言的内置排序算法在针对小数据量数据排序时选择使用插入排序的原因。 算法特性 空间复杂度O(1) 原地排序 稳定排序 自适应排序当数组为升序时时间复杂度为 O(n)当数组为降序时时间复杂度为 O(n2) 希尔排序 插入排序对于大规模乱序数组排序很慢因为它只会交换相邻的元素所以元素只能一步步地从一端移动到另一端如果最小的元素恰好在数组的最右端要将它移动到正确的位置需要移动 N - 1 次。 希尔排序是基于插入排序改进的排序算法它可以交换不相邻的元素以对数组的局部进行排序并最终用插入排序将局部有序的数组排序。它的思想是使数组中间隔为 h 的元素有序h 有序数组如下图为间隔为 4 的有序数组 排序之初 h 较大这样我们能将较小的元素尽可能移动到靠近左端的位置为实现更小的 h 有序创造便利最后一次循环时 h 为 1便是我们熟悉的插入排序。这就是希尔排序的过程代码实现如下 private void sort(int[] nums) {int N nums.length;int h 1;while (h N / 3) {h 3 * h 1;}while (h 1) {for (int i h; i N; i) {int base nums[i];int j i - h;while (j 0 nums[j] base) {nums[j h] nums[j];j - h;}nums[j h] base;}h / 3;}}希尔排序更高效的原因是它权衡了子数组的规模和有序性它也可以用于大型数组。排序之初各个子数组都很短排序之后子数组都是部分有序的这两种情况都很适合插入排序。 选择排序 选择排序的实现非常简单每次选择未排序数组中的最小值将其放到已排序区间的末尾代码实现如下 private void sort(int[] nums) {for (int i 0; i nums.length; i) {int min i;for (int j i 1; j nums.length; j) {if (nums[j] nums[min]) {min j;}}swap(nums, i, min);}}private void swap(int[] nums, int i, int j) {int temp nums[i];nums[i] nums[j];nums[j] temp;}算法特性 空间复杂度O(1) 原地排序 非稳定排序会改变等值元素之间的相对位置 非自适应排序最好/平均/最坏时间复杂度均为 O(n2) 冒泡排序 冒泡排序通过 连续地比较与交换相邻元素实现排序每轮循环会将未被排序区间内的最大值移动到数组的最右端这个过程就像是气泡从底部升到顶部一样代码实现如下 public void sort(int[] nums) {for (int i nums.length - 1; i 0; i--) {// 没有发生元素交换的标志位boolean flag true;for (int j 0; j i; j) {if (nums[j] nums[j 1]) {swap(nums, j, j 1);flag false;}}if (flag) {break;}}}private void swap(int[] nums, int i, int j) {int temp nums[i];nums[i] nums[j];nums[j] temp;}算法特性 空间复杂度O(1) 原地排序 稳定排序 自适应排序经过优化后最佳时间复杂度为 O(n) 巨人的肩膀 《算法导论 第三版》第 2.1 章 《算法 第四版》第 2.1 章 《Hello 算法》第 11 章 排序算法-希尔排序
http://www.dnsts.com.cn/news/69322.html

相关文章:

  • 网站建设流程六个步骤企业管理咨询公司宗旨
  • 宁波网站推广软件哪家强网络推广营销方案100例
  • 网站内链有什么用wordpress 已安装主题
  • 网站收录和反链都正常关键词却没有排名的原因巴里坤网站建设
  • 大连网站设计案例100个最好的微信小程序
  • 做电商网站搭建晋升微信平台服务电话
  • 专业网站网站设计有什么软件可以找客户
  • 湖南网站建设 莫道婚纱摄影介绍
  • 上海专业做网站公司有哪些哪里有做网站的教程
  • 做相册哪个网站好网贷代理推广
  • 做盗版电影网站犯法不长沙市停课最新消息
  • 上海建设银行网站莘庄网站的pv统计功能怎样做
  • logo网站有哪些网站建设业务活动
  • 建设信用卡中心网站怎么搭建网站
  • 福州网站怎么做seo衡阳市建设学校官方网站
  • 网站信息登记表扫描件德勤管理咨询
  • 连衣裙一起做网站wordpress的数据库配置文件
  • 网站建设前台与后台最新技术网站建设流程行情
  • 外贸高端网站定制WordPress纯代码html地图
  • 湘潭网站建设 电话磐石网络郑州网站seo多少钱
  • php做彩票网站吗深圳网页设计与制作公司
  • 网站建设选超速云建站网站可以做系统还原吗
  • 建站系统低价建站新闻资讯wordpress建站怎么样
  • phpcms仿行业网站建湖人才网今曰招
  • 做亚马逊网站费用甘肃建设厅网站首页
  • 代理东莞网站制作公司wordpress 进度插件
  • 网站通栏广告素材兰州网站设计厂家
  • 阿里巴巴网站推广怎么做游戏推广平台代理加盟
  • 南宁百度 - 网站正在建设中广东住房和城乡建设部网站
  • 属于自己的网站做网站开发需要学什么