个人网站平台搭建新昌县城乡建设局网站

张小明 2026/1/11 16:51:32
个人网站平台搭建,新昌县城乡建设局网站,六安网红,同源大厦 网站建设以下是各种排序算法的时间复杂度详细对比#xff1a; 比较排序算法 O(n) 复杂度算法 算法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 说明 冒泡排序 O(n) O(n) O(n) O(1) ✓ 通过相邻元素交换 选择排序 O(n) O(n) O(n) O(1) ✗ 每次选最小/最大值 插入排序 O(n) O(n) …以下是各种排序算法的时间复杂度详细对比比较排序算法O(n²) 复杂度算法算法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 说明冒泡排序 O(n²) O(n) O(n²) O(1) ✓ 通过相邻元素交换选择排序 O(n²) O(n²) O(n²) O(1) ✗ 每次选最小/最大值插入排序 O(n²) O(n) O(n²) O(1) ✓ 适合小规模或基本有序希尔排序 O(n log n) - O(n²) O(n log n) O(n²) O(1) ✗ 改进的插入排序梳排序 O(n log n) O(n) O(n²) O(1) ✗ 冒泡排序的改进O(n log n) 复杂度算法算法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 说明快速排序 O(n log n) O(n log n) O(n²) O(log n) ✗ 分治实际最快归并排序 O(n log n) O(n log n) O(n log n) O(n) ✓ 稳定适合外排序堆排序 O(n log n) O(n log n) O(n log n) O(1) ✗ 原地排序不稳定TimSort O(n log n) O(n) O(n log n) O(n) ✓ Python/Java内置非比较排序算法线性复杂度算法算法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 适用条件计数排序 O(n k) O(n k) O(n k) O(k) ✓ k是数值范围桶排序 O(n k) O(n) O(n²) O(n k) ✓ 数据均匀分布基数排序 O(d·(n k)) O(d·(n k)) O(d·(n k)) O(n k) ✓ d是最大位数详细分析快速排序 时间复杂度分析 - 最优情况每次分区都能均匀划分 T(n) 2T(n/2) O(n) O(n log n) - 最坏情况每次选到最小或最大值作为枢纽 T(n) T(n-1) O(n) O(n²) - 平均情况O(n log n) 空间复杂度递归栈深度 O(log n) 归并排序 时间复杂度分析 - 分治递归T(n) 2T(n/2) O(n) - 用主定理求解O(n log n) - 稳定且总是 O(n log n) 空间复杂度需要额外数组 O(n) 堆排序 时间复杂度分析 - 建堆O(n) - 每次堆调整O(log n) - 总复杂度O(n) n·O(log n) O(n log n) 空间复杂度原地排序 O(1) 实际性能对比小规模数据 (n 50)插入排序 选择排序 ≈ 冒泡排序 快速排序原因插入排序在小数据上常数因子小中等规模数据 (50 n 1000)快速排序 归并排序 堆排序 希尔排序大规模数据 (n 10000)快速排序 TimSort 归并排序 堆排序特定情况· 基本有序数据插入排序 O(n)TimSort O(n)· 范围小的整数计数排序 O(n k)· 外排序内存不足归并排序· 需要稳定性归并排序、TimSortPython中的排序实现内置排序# Python的sorted()使用TimSortsorted_listsorted(data)# O(n log n), 稳定# list.sort()也是TimSortdata.sort()# 原地排序TimSort特点 TimSort 归并排序 插入排序 优化 1. 将数组分成多个run有序子序列 2. 对小的run使用插入排序 3. 使用归并排序合并run 4. 自适应利用已有顺序 复杂度 - 最好O(n)已基本有序 - 平均O(n log n) - 最坏O(n log n) - 空间O(n) 各算法代码实现defbubble_sort(arr):冒泡排序 O(n²)nlen(arr)foriinrange(n):swappedFalseforjinrange(0,n-i-1):ifarr[j]arr[j1]:arr[j],arr[j1]arr[j1],arr[j]swappedTrueifnotswapped:breakreturnarrdefselection_sort(arr):选择排序 O(n²)nlen(arr)foriinrange(n):min_idxiforjinrange(i1,n):ifarr[j]arr[min_idx]:min_idxj arr[i],arr[min_idx]arr[min_idx],arr[i]returnarrdefinsertion_sort(arr):插入排序 O(n²) - 最好O(n)foriinrange(1,len(arr)):keyarr[i]ji-1whilej0andkeyarr[j]:arr[j1]arr[j]j-1arr[j1]keyreturnarrdefmerge_sort(arr):归并排序 O(n log n)iflen(arr)1:returnarr midlen(arr)//2leftmerge_sort(arr[:mid])rightmerge_sort(arr[mid:])result[]ij0whileilen(left)andjlen(right):ifleft[i]right[j]:result.append(left[i])i1else:result.append(right[j])j1result.extend(left[i:])result.extend(right[j:])returnresultdefheap_sort(arr):堆排序 O(n log n)defheapify(arr,n,i):largesti left2*i1right2*i2ifleftnandarr[left]arr[largest]:largestleftifrightnandarr[right]arr[largest]:largestrightiflargest!i:arr[i],arr[largest]arr[largest],arr[i]heapify(arr,n,largest)nlen(arr)# 建堆foriinrange(n//2-1,-1,-1):heapify(arr,n,i)# 一个个取出元素foriinrange(n-1,0,-1):arr[i],arr[0]arr[0],arr[i]heapify(arr,i,0)returnarrdefcounting_sort(arr):计数排序 O(n k)ifnotarr:return[]max_valmax(arr)min_valmin(arr)range_sizemax_val-min_val1count[0]*range_size output[0]*len(arr)# 计数fornuminarr:count[num-min_val]1# 累加foriinrange(1,range_size):count[i]count[i-1]# 输出foriinrange(len(arr)-1,-1,-1):idxarr[i]-min_val output[count[idx]-1]arr[i]count[idx]-1returnoutput算法选择指南根据需求选择· 通用排序快速排序或TimSort· 需要稳定归并排序或TimSort· 原地排序内存少堆排序或快速排序· 小数据量插入排序· 整数范围小计数排序· 数据基本有序插入排序或TimSort· 链表结构归并排序根据数据特征数据特征 | 推荐算法 ----------------------|------------ 随机 | 快速排序 基本有序 | 插入排序/TimSort 范围小的整数 | 计数排序 需要稳定排序 | 归并排序/TimSort 内存受限 | 堆排序 分布式/外排序 | 归并排序性能测试示例importtimeimportrandomimportmatplotlib.pyplotaspltdefbenchmark_algorithms():性能基准测试algorithms{冒泡排序:bubble_sort,选择排序:selection_sort,插入排序:insertion_sort,快速排序:quick_sort_simple,归并排序:merge_sort,堆排序:heap_sort,}sizes[100,500,1000,5000,10000]results{name:[]fornameinalgorithms}forsizeinsizes:arrrandom.sample(range(size*10),size)forname,funcinalgorithms.items():ifsize5000andnamein[冒泡排序,选择排序,插入排序]:# O(n²)算法太慢跳过results[name].append(None)continuearr_copyarr.copy()starttime.time()func(arr_copy)endtime.time()results[name].append(end-start)# 可视化plt.figure(figsize(12,6))forname,timesinresults.items():valid_times[tfortintimesiftisnotNone]valid_sizes[sizes[i]fori,tinenumerate(times)iftisnotNone]ifvalid_times:plt.plot(valid_sizes,valid_times,markero,labelname)plt.xlabel(数据量)plt.ylabel(时间 (秒))plt.title(排序算法性能对比)plt.legend()plt.grid(True)plt.show()# benchmark_algorithms() # 取消注释运行测试这个总结应该能帮助你根据具体情况选择合适的排序算法
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

福州仓前网站建设马鞍山住房和城乡建设局网站

文章为35岁程序员提供了转行大模型领域的8步系统指南:掌握基础知识、实践操作、关注行业动态、建立专业网络、考虑继续教育、技能迁移、职业规划和寻找机会。同时提供成长路线图、视频教程和LLM学习资源等实用材料,帮助程序员系统性地学习大模型知识&…

张小明 2026/1/11 15:46:58 网站建设

安徽网站博罗中山网站建设

前言在开源鸿蒙(OpenHarmony)全场景分布式生态中,跨设备能力调度是实现 “设备能力虚拟化、资源共享化、服务协同化” 的核心技术。传统多设备协作模式下,设备能力相互隔离,无法高效调用其他设备的硬件资源与软件服务&…

张小明 2026/1/11 3:21:53 网站建设

互联网彩票网站开发上海3d网站建设

网络数据备份与恢复全解析 在当今数字化的网络环境中,数据的安全性和可用性至关重要。一旦网络服务器出现问题,可能会导致业务中断、数据丢失等严重后果。因此,做好网络数据的备份与恢复工作是保障业务正常运行的关键。本文将详细介绍网络数据备份与恢复的相关知识,包括备…

张小明 2026/1/10 14:43:07 网站建设

网站建设寻求哪个网站建设公司好

使用 Samba 备份客户端计算机 在当今数字化的时代,数据备份是保障系统健康和数据安全的重要环节。Samba 作为一种强大的工具,不仅可以用于常规的服务器备份,还能在客户端计算机的备份策略中发挥核心作用。本文将详细介绍如何使用 Samba 备份客户端计算机,包括准备工作、备…

张小明 2026/1/9 0:08:38 网站建设

网站前置审批文件网页设计实训总结与展望150字

jscope 使用实战:从原理到闭环调试的深度探索在嵌入式开发的世界里,我们常与“看不见的变量”搏斗。一个 PID 控制系统突然振荡,电流采样噪声陡增;你翻遍代码逻辑无果,串口打印又打乱了实时节奏——这时,如…

张小明 2026/1/8 22:56:17 网站建设