1.插入排序法 插入到有序数组中合适的位置
思想:插入排序法的排序思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,所以只是要从右向左找到比插入点(下面程序中的insertNote)小(对升序而言)的第一个数组元素就插入到其后面.直到将最后一个数组元素插入到数组中,整个排序过程就算完成.
稳定性:稳定的.
时间复杂度:O(n2)
空间复杂度:O(1)
2.冒泡算法 最大的冒泡到最后位置
思想:冒泡排序是一种简单的交换类排序。其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾,此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。
稳定性:稳定的.
时间复杂度:O(n2)
空间复杂度:O(1)
3.选择排序 每次选择最小的放到i位置上
思想:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录
稳定性:不稳定.
时间复杂度:O(n2)
空间复杂度:O(1)
4.快速排序 分两部分 一部分比这个值大,一部分比这个值小 然后递归
思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
稳定性:不稳定.
时间复杂度: O(nlog2n) 最坏O(n2) 平均O(nlog2n)
空间复杂度:O(nlog2n)
5.希尔排序 插入排序的一种 比较 A[i] A[i+d] 大小替换 直至d=1
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
稳定性:不稳定.
时间复杂度: O(n1.3) 最坏O(n2) O(n)
空间复杂度:O(1)
6.堆排序
初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个 堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对 它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。
稳定性:不稳定.
时间复杂度: O(nlog2n)
空间复杂度:O(1)
7.归并排序 一个数组分成多个 然后多个之间合并
思想:原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组
稳定性:稳定.
时间复杂度: O(nlog2n)
空间复杂度:O(1)
8.基数排序
思想:它是一种非比较排序。它是根据位的高低进行排序的,也就是先按个位排序,然后依据十位排序……以此类推。
稳定性:稳定.
时间复杂度: O(d(n+r))
空间复杂度:O(n+r)
相关推荐
本文将深入探讨“常见算法”,包括它们的基本概念、类型以及在实际应用中的作用。 一、算法基本概念 算法是一系列精确的指令,用于解决特定问题或执行特定任务。它由一组有限的步骤组成,这些步骤必须是明确的、可...
算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法算法.rar,常见算法...
在这个“java常见算法题解析大全”中,你将找到一系列涵盖不同难度级别的算法问题,旨在帮助Java开发者提升技能,增强解决问题的能力。 首先,让我们了解一下折半查找(Binary Search)算法。这是一种在有序数组中...
Java 实现常见算法 在 Java 中,实现常见算法是非常重要的,以下是关于链表、约瑟环问题、单链表反转、最大子序列和问题、最大公因数、判断两个数组中是否有相同的数字、字符串反转等知识点的总结。 判断链表是否...
一篇吴恩达精彩的机器学习常见算法分类汇总大全,总结的很好。推荐给大家。
计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小...
机器学习常见算法分类 在机器学习领域,算法众多,了解每种算法的特点和应用场景至关重要。根据学习方式和算法类似性,可以将机器学习算法分为几大类。 一、学习方式 机器学习的学习方式可以分为四类:监督式学习...
通过学习这些PPT,参赛者可以深化对ACM常见算法的理解,提高解决问题的能力。同时,实战训练和不断刷题也是提升算法能力的关键。在ACM竞赛中,灵活运用各种算法并快速编写出高效代码是取胜的关键。
计算机常见算法面试题 本资源摘要信息涵盖了计算机常见算法面试题,主要涉及链表、字符串操作、搜索算法等方面的知识点。下面是对标题、描述、标签和部分内容的详细解释: 标题:计算机常见算法面试题 该标题表明...
以下是一些常见的面试算法题及其详解: 1. **二分查找**:二分查找是一种在有序数组中寻找特定元素的搜索算法。它通过不断缩小查找范围,每次将查找区间减半,直到找到目标元素或确定其不存在。了解如何设计递归或...
"编程常见算法.zip"这个压缩包文件包含了一系列关于编程算法的详细资料,旨在帮助学习者理解和掌握这些在企业笔试、面试中常被问到的经典算法。这些算法不仅对于求职者至关重要,也是提升编程能力的关键。 首先,...
本资源“操作系统常见算法算法演示”通过FLASH动画的形式,直观地展示了这些算法的工作原理,为学习者提供了生动的教学辅助。 1. **进程调度算法**:操作系统中的进程调度是决定哪个进程获得CPU执行权的关键步骤。...
机器学习常见算法分类 机器学习是当前数据分析领域的一个热点容,许多人在平时的工作中都或多或少会用到机器学习的算法。根据学习方式和算法的类似性,我们可以将机器学习算法分类如下: 监督式学习 监督式学习是...
常见算法"这个压缩包文件包含了丰富的C语言编程实例,特别是针对各种常见算法的实现。这些算法是计算机科学的基础,对于提升编程技能,理解和解决实际问题至关重要。 首先,让我们了解一下什么是算法。算法是一系列...
基于多种常见算法实现动态规划项目c++源码+详细注释(回溯、贪心、递归、分支限界、分治等算法).zip基于多种常见算法实现动态规划项目c++源码+详细注释(回溯、贪心、递归、分支限界、分治等算法).zip基于多种常见算法...
"ALG.zip"这个压缩包文件显然包含了关于"alg算法"和"常见算法"的学习资料,这些资源可能是一位有经验的学长留下的宝贵遗产,被多届学生传承使用,足以证明其价值。 首先,我们要理解什么是算法。算法是一系列明确的...
常见算法介绍 排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序 搜索算法 线性搜索 二分搜索 动态规划 贪心算法 回溯算法 算法刷题 排序算法题目 题目1:数组排序 题目2:Kth Largest Element in an Array ...
【资源介绍】C++基于opencv图像处理的经典常见算法是实现源码(含插值、仿射变换、滤波、分割、边缘检测等).zipC++基于opencv图像处理的经典常见算法是实现源码(含插值、仿射变换、滤波、分割、边缘检测等).zipC++...