新闻详情

新闻详情

首页 / 资讯中心 / 详情

冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序以及堆排序

发布时间:2026/9/3 6:16:53来源:尧图网络
冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序以及堆排序
1、冒泡排序- 依次比较相邻两元素若前一元素大于后一元素则交换之直至最后一个元素即为最大然后重新从首元素开始重复同样的操作直至倒数第二个元素即为次大元素依次类推。如同水中的气泡依次将最大或最小元素气泡浮出水面。实现代码就是两个for循环然后比较交换位置。时间复杂度O(N2)2、选择排序- 首先初始化最小元素索引值为首元素依次遍历待排序数列若遇到小于该最小索引位置处的元素则刷新最小索引为该较小元素的位置直至遇到尾元素结束一次遍历并将最小索引处元素与首元素交换然后初始化最小索引值为第二个待排序数列元素位置同样的操作可得到数列第二个元素即为次小元素以此类推。简单的说一次遍历找出最小的元素将最小的元素放在最前面第二次就找出第二小的交换第二个位置以此类推。时间复杂度O(N2)3、快速排序- 类似于选择排序的定位思想选一基准元素依次将剩余元素中小于该基准元素的值放置其左侧大于等于该基准元素的值放置其右侧然后取基准元素的前半部分和后半部分分别进行同样的处理以此类推直至各子序列剩余一个元素时即排序完成类比二叉树的思想from up to down时间复杂度O(NlogN)import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] a {1, 2, 4, 5, 7, 4, 5, 3, 9, 0}; System.out.println(Arrays.toString(a)); quickSort(a); System.out.println(Arrays.toString(a)); } public static void quickSort(int[] a) { if (a.length 0) { quickSort(a, 0, a.length - 1); } } private static void quickSort(int[] a, int low, int high) { //1,找到递归算法的出口 if (low high) { return; } //2, 存 int i low; int j high; //3,key int key a[low]; //4完成一趟排序 while (i j) { //4.1 从右往左找到第一个小于key的数 while (i j a[j] key) { j--; } // 4.2 从左往右找到第一个大于key的数 while (i j a[i] key) { i; } //4.3 交换 if (i j) { swap(a,i,j); } } // 4.4调整key的位置 swap(a,i,low); //5, 对key左边的数快排 quickSort(a, low, i - 1); //6, 对key右边的数快排 quickSort(a, i 1, high); } private static void swap(int[] a, int i, int j) { int p a[i]; a[i] a[j]; a[j] p; } }4、插入排序- 数列前面部分看为有序依次将后面的无序数列元素插入到前面的有序数列中初始状态有序数列仅有一个元素即首元素。在将无序数列元素插入有序数列的过程中采用了逆序遍历有序数列相较于顺序遍历会稍显繁琐但当数列本身已近排序状态效率会更高。时间复杂度O(N2)5、希尔排序- 插入排序的改进版。为了减少数据的移动次数在初始序列较大时取较大的步长通常取序列长度的一半此时只有两个元素比较交换一次之后步长依次减半直至步长为1即为插入排序由于此时序列已接近有序故插入元素时数据移动的次数会相对较少效率得到了提高。时间复杂度通常认为是O(N3/2)6、基数排序- 桶排序的改进版桶的大小固定为10减少了内存空间的开销。首先找出待排序列中得最大元素max并依次按max的低位到高位对所有元素排序桶元素10个元素的大小即为待排序数列元素对应数值为相等元素的个数即每次遍历待排序数列桶将其按对应数值位大小分为了10个层级桶内元素值得和为待排序数列元素个数。时间复杂度O(x*N)7、归并排序- 采用了分治和递归的思想递归分治-排序整个数列如同排序两个有序数列依次执行这个过程直至排序末端的两个元素再依次向上层输送排序好的两个子列进行排序直至整个数列有序类比二叉树的思想from down to up。时间复杂度O(NlogN)8、堆排序- 堆排序的思想借助于二叉堆中的最大堆得以实现。首先将待排序数列抽象为二叉树并构造出最大堆然后依次将最大元素即根节点元素与待排序数列的最后一个元素交换即二叉树最深层最右边的叶子结点元素每次遍历刷新最后一个元素的位置自减1直至其与首元素相交即完成排序。时间复杂度O(NlogN)9、桶排序- 实现线性排序但当元素间值得大小有较大差距时会带来内存空间的较大浪费。首先找出待排序列中得最大元素max申请内存大小为max 1的桶数组并初始化为0然后遍历排序数列并依次将每个元素作为下标的桶元素值自增1最后遍历桶元素并依次将值非0的元素下标值载入排序数列桶元素1表明有值大小相等的元素此时依次将他们载入排序数列遍历完成排序数列便为有序数列。时间复杂度O(x*N)
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于MATLAB GUI的教室人数统计系统:从图像处理到算法实现 2026/9/3 8:53:34

基于MATLAB GUI的教室人数统计系统:从图像处理到算法实现

简介:本资源是一套面向MATLAB初学者与图像处理实践者的教室人数统计完整解决方案,聚焦GUI交互设计、实时人数识别与学术论文写作三重能力训练。资源共11个文件,含6张实测场景图像(jpg)、3个核心MATLAB函数脚本&#xf…

阅读更多 →
从零实现机械臂阻抗控制:Matlab/Simulink仿真全解析与工程实践 2026/9/3 8:53:34

从零实现机械臂阻抗控制:Matlab/Simulink仿真全解析与工程实践

简介:本资源是一套面向计算机、电子信息工程及数学等专业本科生的机械臂阻抗控制仿真实践材料,适用于课程设计、期末大作业或毕业设计阶段的算法验证与系统建模需求。压缩包共17个文件,含6个核心MATLAB脚本(如impedance_control.m…

阅读更多 →
亲子编程启蒙:用Python turtle和三个小项目接住孩子的创意 2026/9/3 8:53:34

亲子编程启蒙:用Python turtle和三个小项目接住孩子的创意

如果孩子出去玩了一圈,回家没有第一时间要平板,而是默默递给你一个自己做的小东西,脸上还带着“你快看看”的表情,这多半不是普通日常,而是一个很值得抓住的编程启蒙信号。很多人把“沉浸式投喂”理解成刷短视频、看动…

阅读更多 →
Milvus bootcamp 实操拆解:从安装部署到向量检索用例完整跑通 2026/9/3 8:53:34

Milvus bootcamp 实操拆解:从安装部署到向量检索用例完整跑通

Milvus-io/bootcamp 这个仓库,表面上看只是 Milvus 官方做示例教程的地方,但对刚接触 Milvus 向量数据库的人来说,它比一堆源码更有价值。很多人在搜索里真正想问的其实是:milvus 怎么安装,milvus etcd 是干嘛的&#…

阅读更多 →
OpenScreen 时间轴剪辑完整指南:剪掉废话片段,突出关键操作 2026/9/3 8:53:34

OpenScreen 时间轴剪辑完整指南:剪掉废话片段,突出关键操作

OpenScreen 时间轴剪辑完整指南:剪掉废话片段,突出关键操作 【免费下载链接】openscreen Create stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio. 项目地址:…

阅读更多 →
基于STM32F103的四足机器人步态控制:从原理到完整代码实现 2026/9/3 8:50:34

基于STM32F103的四足机器人步态控制:从原理到完整代码实现

简介:本资源是一套面向嵌入式初学者与机器人爱好者设计的四足机器人步态控制实战代码,基于STM32F103ZGT6主控芯片,使用Keil5开发环境,完整实现小跑、行走、左右转弯、横移及后退等六种基础步态,解决四足机器人底层运动…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞