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

wordpress 标签样式容城轻松seo优化排名

wordpress 标签样式,容城轻松seo优化排名,做热图的在线网站,公司注册名字一、排序算法的概念排序(Sorting)是指:将一组“无序”的数据,按照某种“顺序规则”排列成“有序”的过程。1、按排序顺序分类:升序:从小到大排列,如 1, 3, 5, 7, 9降序:从大到小排列…

一、排序算法的概念

        排序(Sorting)是指:将一组“无序”的数据,按照某种“顺序规则”排列成“有序”的过程。

1、按排序顺序分类:

        升序:从小到大排列,如 1, 3, 5, 7, 9

  • 降序:从大到小排列,如 9, 7, 5, 3, 1

2、按排序方式分类:

分类方式

排序类型

简要说明

内部排序

冒泡、插入、选择、归并、快速等

所有数据在内存中进行排序

外部排序

多路归并排序

数据量过大时,需借助外部存储

二、 常见的排序算法及其特点

排序算法

时间复杂度(平均)

空间复杂度

是否稳定

适用场景

冒泡排序

O(n²)

O(1)

稳定

小规模数据、教学演示

选择排序

O(n²)

O(1)

不稳定

数据量小、对稳定性要求不高

插入排序

O(n²)

O(1)

稳定

基本有序数据、链表排序

归并排序

O(n log n)

O(n)

稳定

大数据排序、需要稳定性

快速排序

O(n log n)

O(log n)

不稳定

实际中最常用,效率高

堆排序

O(n log n)

O(1)

不稳定

不要求稳定性的高效排序

计数排序

O(n + k)

O(k)

稳定

数据范围小的整数排序

桶排序

O(n + k)

O(n + k)

稳定

分布均匀的数据

基数排序

O(nk)

O(n + k)

稳定

位数较小的整数/字符串

三、排序算法的应用场景

  1. 数据库系统

    • 排序是实现 ORDER BY 的核心

    • 排序有助于数据压缩和索引创建

  2. 搜索优化

    • 排序之后可以使用二分查找,大幅提高搜索效率

    数据分析和可视化

    • 排序能帮助找出最大/最小值、前 K 大数等

    • 排序数据更容易图表化展示

  3. 去重和统计

              排序后相同数据聚集在一起,方便统计频率或去重

  4. 工程开发

              排序是实现自动推荐、页面排名、调度优化等系统的基础

四、常用排序算法的实现

        1、冒泡排序🫧

        不断比较邻近的元素,将大元素右移,最终排成升序序列

代码实现:

void Swap(int* p,int* q){assert(p&&q);int tmp = *p;*p = *q;*q = tmp;return;
}void Bubble_sort(int* arr,int size){assert(arr);int end = size-1;int flag = 0;for (int i = 0;i<end;i++){for(int j = 0;j<end-i;j++){if(arr[j]>arr[j+1]){Swap(&arr[j],&arr[j+1]);flag = 1;}}if(flag == 0){break;}}return;
}//测试函数
int main(){int arr[]= {6,2,8,10,1,3,5,12,4};Bubble_sort(arr,9);for(int i = 0;i<9;i++){printf("%d ",arr[i]);}
}

冒泡排序的时间复杂度为O(N^2),空间复杂度O(1)

2、插入排序

        将数组的每个元素与所在位置之前的元素比较,找到升序(降序)位插入即可。

代码实现:

void Insert_Sort(int* arr,int size){assert(arr);for (int end = 1;end<size;end++){for(int j = end-1;j>=0;j--){if(arr[j+1]<arr[j]){Swap(&arr[j],&arr[j+1]);}else{break;}}}
}int main(){int arr[]= {6,2,8,10,1,3,5,12,4};// Bubble_sort(arr,9);Insert_Sort(arr,9);for(int i = 0;i<9;i++){printf("%d ",arr[i]);}
}

插入排序的时间复杂度为O(N^2),空间复杂度O(1)

3、希尔排序的基本思想

希尔排序的提出者是 Donald Shell(1959 年),它是第一个突破 O(n²) 时间复杂度的排序算法。

核心思想:
将原始数组按照某个间隔 gap 进行“分组”,每组分别进行插入排序,然后逐步减小 gap,最终 gap = 1 时再进行一次插入排序,完成排序。
希尔排序的步骤说明(以升序为例)
  1. 选择一个初始间隔 gap,通常是数组长度的一半,如 gap = n/2

  2. 将数组划分为 gap 个子序列(组内元素间隔为 gap

  3. 对每个子序列进行插入排序

  4. 缩小 gap:gap = gap / 2

  5. 重复步骤 2~4,直到 gap = 1

思维导图

代码实现:

void Shell_Sort(int* arr,int size){assert(arr);int gap = size;while(gap > 1){gap = gap/3+1;for (int end = gap;end<size;end++){int j = end-gap;int tmp = arr[end];while (j>=0 && arr[j]>tmp){arr[j+gap] = arr[j];j -= gap;}arr[j+gap] = tmp;}  }
}

希尔排序的时间复杂度:最坏情况视 gap 序列而定,常见为 O(n^(1.3 ~ 2)),比 O(n²) 快很多

希尔排序的特点

特性

描述

时间复杂度

最坏情况视 gap 序列而定,常见为 O(n^(1.3 ~ 2)),比 O(n²) 快很多

空间复杂度

O(1)(原地排序)

稳定性

不稳定排序(可能打乱相同元素顺序)

应用场景

中等规模、内存受限的排序任务

希尔排序与插入排序的对比

项目

插入排序

希尔排序

排序速度

慢(O(n²))

快(改进版插排)

数据交换次数

排序思想

比较相邻元素

比较“间隔 gap”的元素

应对无序数据

效率低

效率更高

好了本期的排序算法内容分享就到这里结束了,谢谢大家的点赞收藏

http://www.dtcms.com/a/546852.html

相关文章:

  • 网站谁做的比较好网站建设心得小结
  • 辽宁建设工程信息网官网新网站如何进入手册设计
  • 抖音代运营费用一年多少钱怀化seo推广
  • ROS2系列 (8) : Python话题通信节点——发布者示例
  • 公司做网站找谁wordpress显示文章时分秒代码
  • dp与px转换原理
  • 网站开发推广方案策划书网站seo规范
  • 那个网站做二手车好沙洋网站定制
  • 权限管理混乱会造成哪些安全隐患
  • 官方网站建设必要性网站建设维护与管理实训总结
  • 《Zookeeper 常用命令手册:客户端操作、集群管理与监控指令》
  • 浙江电商网站建设销售百度投流运营
  • 构建新能源智能调度大脑:7分支并行算法架构的工程实践
  • 教育网站建设的策划1122t
  • 仓颉语言布局系统深度解析:从算法到自定义组件实践
  • 社区网站怎么建做搜索的网站有哪些
  • 广西建设厅官网站张家口建设厅网站
  • 网站开发协议模版开源课程 视频网站模板
  • 苏州要服务网站建设平台网站开发公司组织架构
  • dedecms网站搬家进行网站建设
  • 深入 Rust 之心:Serde 如何实现真正的“零成本抽象”
  • 智能建站网站网站开发的外文翻译
  • 做信息采集的网站邯郸 网站建设
  • 肝脏肿瘤MRI图像分类数据集
  • NX603NX604美光SSD固态NX605NX606
  • 网站建设为主题调研材料网站开发与维护是干什么的
  • 盐城做企业网站的价格wordpress 投票插件
  • No酒类网站建设2019建设银行招聘网站
  • 从零快速学习RNN:循环神经网络完全指南
  • 购买建立网站费怎么做会计凭证wordpress 快速回复