首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏myTest

    十大排序

    冒泡排序 public class BubbleSort { public static void main(String[] args) { int[] arr = {3, int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } } 桶排序 while (bucket[i]-- > 0) { arr[index++] = i; } } } } 堆排序 int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } } 插入排序 int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } } 基数排序

    37130编辑于 2025-02-12
  • 来自专栏springBoot3.0

    十大排序

    目录 1、冒泡排序(Bubble Sort) 2、选择排序(Selection Sort) 3、插入排序(Insertion Sort) 4、希尔排序(Shell Sort) 5、归并排序(Merge Sort) 11、 总 结 首先排序算法可以分为内部排序算法和外部排序算法:在内存中进行的称为内部排序算法,也就是这里所说的这十种算法;相应的,当数据量很大时无法全部拷贝到内存需要使用外存,称为外部排序算法 接下来我们可用如下表来简单概括这十种算法: 十大经典排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 排序方式 稳定性 冒泡排序 O \OmicronO(n2) O \OmicronO 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 (Selection Sort) 算法步驟 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置; 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾; 重复第2步,直到所有元素均排序完毕

    52040编辑于 2023-03-06
  • 来自专栏云计算与大数据技术

    十大排序之冒泡排序

    冒泡排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想可以联想为向湖中下石头和较轻的石头变成泡泡上浮的过程 想象每一块石头处在相应的高度,从上往下相邻两个石头进行比较,较大的石头往下沉,替代下一石头的位置 较轻的石头像泡泡一样往上浮一个单位,直到这一轮最重的石头沉到湖底,此趟比较才结束 此时,最重的石头已经再湖底,不需要再参加下一趟排序,可以想象为已经与湖底融为一体了 可以得到,每次排序都会将最重的石头往下沉并和湖底融为一体 因此,排序至多需要 n-1 趟(最后一趟只剩一个元素,因此不会再排序),最少需要1趟(已经有序) 算法思想:双重for循环,外层循环控制每次排序元素的长度(被排序的元素个数依次递减),内层循环遍历每轮循环的元素 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现:(未优化版) package com.gxwz.vo; import java.util.Arrays; /** * Java十大排序之冒泡排序 , 24, 26, 49, 100] [0, 2, 9, 10, 16, 24, 26, 49, 100] 优化版: import java.util.Arrays; /** * Java十大排序之冒泡排序

    35130发布于 2021-04-27
  • 来自专栏CodeWwang

    十大排序算法

    算法思想: 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 以此类推,直到所有元素均排序完毕 代码: function 对这两个子序列分别采用归并排序;3. 将两个排序好的子序列合并成一个最终的排序序列。 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。 但希尔排序是非稳定排序算法。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序. 计数排序不是比较排序排序的速度快于任何比较排序算法。

    46930编辑于 2022-08-24
  • 来自专栏云计算与大数据技术

    十大排序之插入排序

    插入排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想相对直观,可以联想自己平常打扑克牌,发牌时自己边摸牌边整理牌顺序的场景 算法思想:A[i] 与 A[i] 之前的元素 A[j逐个进行比较,如果 i  ] 适用场景:数据量小、有序或者部分有序的数列 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现: import java.util.Arrays; /** * Java十大排序之插入排序 i] = 26;当 j = 0 时 ,A[i] < A[j], A[i] 和 A[j] 互换,即 26和49互换 [26, 49, 2, 9, 16, 0, 10, 100, 24] 第 2 趟排序 : [2, 49, 26, 9, 16, 0, 10, 100, 24] [2, 26, 49, 9, 16, 0, 10, 100, 24] 第 3 趟排序: [2, 26, 49, 9, 16, 0, 10, 100, 24] [2, 9, 49, 26, 16, 0, 10, 100, 24] [2, 9, 26, 49, 16, 0, 10, 100, 24] 第 4 趟排序

    31620发布于 2021-04-27
  • 来自专栏Java架构师必看

    十大排序8–堆排序(Heap Sort)

    排序 文章目录 堆排序 基本介绍 大顶堆举例说明 堆排序的基本思想: 简单的思路 代码实现 将一个数组(二叉树), 调整成一个大顶堆 //编写一个堆排序的方法 完整代码 总结: 图解: 基本介绍 堆排序是利用堆这种数据结构二设计的一种排序算法,堆排序是一种选择排序,他的最好最坏,平均复杂度都为O(nlogn), 它也是不稳定排序 堆是具有一下性质的完全二叉树:每个节点的值都大于或者等于其左右孩子节点的值 堆排序的基本思想: 将待排序序列构造成一个大顶堆 此时,整个序列的最大值就是堆顶的根节点 将其与末尾元素进行交换, 此时末尾就为最大值 然后将剩余的n-1个元素重新构造一个堆,这样会得到n个元素的次小值 } } //当for 循环结束后,我们已经将以i 为父结点的树的最大值,放在了 最顶(局部) arr[i] = temp;//将temp值放到调整后的位置 } //编写一个堆排序的方法 public static void heapSort(int arr[]) { int temp = 0; System.out.println("堆排序!!")

    58820发布于 2021-04-22
  • 来自专栏AllTests软件测试

    十大经典排序算法

    十大经典排序算法 目录 1、前言 2、冒泡排序 3、选择排序 4、插入排序 5、希尔排序 6、归并排序 7、快速排序 8、堆排序 9、计数排序 10、桶排序 11、基数排序 1、 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序 用一张图概括: 关于时间复杂度: 1、平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序 2、线性对数阶(O(nlog2n))排序快速排序、堆排序和归并排序。 3、O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。希尔排序。 4、线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序

    87720编辑于 2023-01-05
  • 来自专栏C++

    【C++】十大排序

    时间复杂度分析 选择排序 引言 选择排序(Selection Sort)是一种简单直观的排序算法。 算法思想 第一步、在未排序的序列中找到最小(最大)的元素,存放到排序序列的起始位置。 第二步、再从剩余未排序元素中找到最小(最大)的元素,然后放到已排序的序列的末尾。 引言 桶排序(Bucket Sort)是一种基于计数的排序算法,工作原理是将数据分到有限数量的桶子里,然后将桶子在分别排序(有可能在使用别的排序算法或者是以递归方式继续使用桶排序进行排序)。 引言 基数排序(Radix Sort)是一种非比较型的排序算法,他根据数字的每一位来进行排序,通常用于整数排序,基数排序的基本思想就是通过对所有元素进行若干次“分配”和“收集”操作来实现排序。 引言 希尔排序(Shell Sort):是直接插入排序的一种优化,希尔排序通过基于直接插入排序间隔性的将非顺序序列的元素进行排序

    21500编辑于 2024-11-19
  • 来自专栏冷环渊的全栈工程师历程

    十大经典排序算法:快速排序debug分析排序过程

    思路分析 快速排序案例 排序过程断点调试 快速排序测速 快速排序 快速排序法介绍: 快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想是:通过一趟排序将要排序的数据分割成独立的两 部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 思路分析 快速排序的思路由上图所示: 首先是找到一个基准点,这个不一定非要是中位数,也可以是任意一位,可以自主分割,在什么位置都可以,这里我们以中位来学习 根据中位数为基准,将需要排序的数组分为两份 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。 ,再拿小冷的快速排序测试一下,算法的精妙之处一下就能感受到了

    45210编辑于 2022-01-26
  • 来自专栏与你一起学算法

    十大经典排序算法之希尔排序算法

    希尔排序 之前我们讲过冒泡排序、选择排序、插入排序,它们的时间复杂度都是 ,比较高,在实际的场景用应用也比较少。 今天我们要讲的希尔排序虽然也是插入排序的一种,但是它是插入排序的一个高效变形,脱离了 的时间复杂度深渊。 主要思想 希尔排序的思想简单点说就是有跨度的插入排序,这个跨度会逐渐变小,直到变为 1,变为 1 的时候也就是我们之前讲的简单插入排序了。 性能分析 希尔排序的时间复杂度不是我们表面认为的那样,一般来说认为希尔排序的时间复杂度是 ,这个证明起来比较难。 空间复杂度的话,希尔排序没有使用额外的空间,进行存储,是原地排序算法。 希尔排序算法不是稳定的排序算法。前面我们也提到过,只要涉及到大跨度的排序算法,一般都不是稳定的排序算法。 优化 希尔排序的优化主要是针对增量序列的优化。

    75630发布于 2021-03-23
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. 1-希尔排序 算法思想: 其实希尔排序的思想很简单,因为希尔排序的基本思想就是第一篇中间讲解的关于插入排序的基本思想,只是希尔排序相比较与插入排序多加了一步就是确定步长.之前在插入排序的过程中,我们的步长是固定的即为 1,在希尔排序中我们的步长是不固定的,一开始数组长度的一半,之后每次分组排序之后步长就再减半,直到步长到1为止.这时候我们的排序就已经完成了. 希尔排序算法是不稳定的,这里大家可能会产生这样的疑问,本身希尔排序算法的本质就是插入排序,只不过是多了一步确定步长的过程,为什么插入排序就是稳定的,但是希尔排序缺失不稳定的呢? 归并排序需要消耗大量的内存空间.这个内存空间是对比冒泡排序之类的排序算法而言的,因为他们的内存空间都是只存在于常量级别的,但是归并排序却是需要消耗线性级别的内存空间,所以才会使用大量这个形容词.消耗的内存空间就是等同于待排序序列的长度

    40920编辑于 2022-01-06
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. 1-希尔排序 算法思想: 其实希尔排序的思想很简单,因为希尔排序的基本思想就是第一篇中间讲解的关于插入排序的基本思想,只是希尔排序相比较与插入排序多加了一步就是确定步长.之前在插入排序的过程中,我们的步长是固定的即为 ,这里大家可能会产生这样的疑问,本身希尔排序算法的本质就是插入排序,只不过是多了一步确定步长的过程,为什么插入排序就是稳定的,但是希尔排序缺失不稳定的呢? 归并排序需要消耗大量的内存空间.这个内存空间是对比冒泡排序之类的排序算法而言的,因为他们的内存空间都是只存在于常量级别的,但是归并排序却是需要消耗线性级别的内存空间,所以才会使用大量这个形容词.消耗的内存空间就是等同于待排序序列的长度 O(log N) 到这里十大经典排序算法详解的第二期内容就已经结束了.如果觉得UP的文章写得还可以或者对你有帮助的话,可以关注UP的公众号,新人UP需要你的支持!!!

    42730发布于 2021-01-25
  • 来自专栏精讲JAVA

    十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: ? 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序

    1.4K50发布于 2018-12-28
  • 来自专栏Java后端开发博客

    十大经典排序算法

    # 十大经典排序算法 介绍 关于时间复杂度 冒泡排序 插入排序 希尔排序 参考资料 # 介绍 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 插帽龟,它很稳。(稳定性:稳定) 插帽龟喜欢选帽插,插完就慌了。 希尔排序 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 # 希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。

    62420编辑于 2022-12-30
  • 来自专栏全栈程序员必看

    十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

    稳定性 1.3.2 时间复杂度 1.3.3 适用场景 二、选择排序 2.1 选择排序基础【必会知识】 2.2 选择排序优化 2.2.1 选择排序优化图示 2.2.2 选择排序优化实现 2.3 选择排序的稳定性 、复杂度及适用场景 2.3.1 稳定性 2.3.2 时间复杂度 2.3.3 适用场景 三、插入排序 3.1 插入排序基础【必会知识】 3.2 插入排序优化 3.2.1 折半插入排序 3.2.2 2-路插入排序 希尔排序基础 5.1.1 排序过程图示 5.1.2 排序过程实现 5.2 希尔排序优化 5.3 希尔排序的稳定性、复杂度及适用场景 5.3.1 稳定性 5.3.2 时间复杂度 5.3.3 适用场景 一 1.3.3 适用场景   冒泡排序适用于数据量很小的排序场景,因为冒泡的实现方式较为简单。 二、选择排序 2.1 选择排序基础【必会知识】   选择排序是一种简单直观的排序算法。 四、快速排序 4.1 快速排序基础【必会知识】   快速排序也是一种较为基础的排序算法,其效率比冒泡排序算法有大幅提升。

    1.1K50编辑于 2022-09-14
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前,我们首先来了解一下评判一个算法一般都是从哪些角度来评判的 ,这里我们还是通过下面的图来帮助大家加深印象. image.png 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序, 冒泡冒泡排序是稳定的,只有当元素的大小不一样时,元素之间才会交换位置,这就使得相同元素的相对位置在排序之前以及排序之后都是不变的,所以冒泡排序是稳定的. ,大家可以发现该算法不像上面的冒泡与选择排序一样,每次循环排序都能确定一个元素的最终位置.插入排序每次循环排序之后是不能够唯一确定一个元素的最终位置的.他只能是每次循环之后确定一些元素的相对位置. 插入排序和冒泡排序一样也有一个极端的排序情况,但是冒泡排序的极端情况是最惨的情况,但是插入排序的极端情况就是最爽的情况.就是在序列已经基本有序的时候,插入排序是最快的,时间复杂度可以达到O(n)即线性级别

    35610编辑于 2022-01-06
  • 来自专栏与你一起学算法

    十大经典排序算法之归并排序

    归并排序 前面的时候讲了一些时间复杂度是 的排序算法,虽然希尔排序不是 的排序算法,但是在真正的实际应用中还是比较少的,因为相对来说,排序所需的时间比较长。 今天我就给你介绍另外一种排序算法,归并排序算法。它的时间复杂度是 , 而且是稳定的排序算法,唯一美中不足的一点是它不是原地排序算法,需要使用额外的存储空间。 归并排序,采用的是分而治之的思想,将要排序的区间一分为二,当左右区间都有序后,就相当于对两个有序数组进行合并。那怎样左右区间的元素才能有序呢? (array2) merge_sort(array3) print(array3) merge_sort(array4) print(array4) 延伸思考 归并排序除了作为一种排序算法 合并K个升序链表 总结 归并排序是非常高效的排序算法。 时间复杂度数 ,无论要排序的数据是什么样的,性能都是稳定的。 空间复杂度是 另外,合并操作是非常高效且常用的操作,值得我们学习体会。

    47520发布于 2021-03-23
  • 来自专栏全栈程序员必看

    十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十大经典排序算法 -归并排序算法详解 十大经典排序算法-堆排序算法详解 十大经典排序算法-计数排序算法详解 十大经典排序算法-桶排序算法详解 十大经典排序算法-基数排序算法详解 一、什么是快速排序 1.概念 快速排序(Quick Sort)是从冒泡排序算法演变而来的,实际上是在冒泡排序基础上的递归分治法。 按照快速排序的思想,我们先选择一个基准元素,进行排序 我们选取4为我们的基准元素,并设置基准元素的位置为index,设置两个指针left和right,分别指向最左和最右两个元素 接着 ) 在极端情况下,快速排序算法每一轮只确定基准元素的位置,时间复杂度为O(N^2) 2.空间复杂度 快速排序算法排序过程中只是使用数组原本的空间进行排序,因此空间复杂度为O(1) 3.稳定性 快速排序算法在排序过程中

    49130编辑于 2022-09-17
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前 排序类型 这里的比较就和大家平常理解的比较是一个意思,就是主要是通过比较来进行排序的. 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 算法思想: 说到冒泡,大家的第一反应可能就是下图里面金鱼吐泡泡的画面 : 这就是冒泡排序的基本思想.并且我们能稍微总结一下冒泡排序的特点: 每次排序都能至少确定一个元素的最终位置 冒泡冒泡排序是稳定的,只有当元素的大小不一样时,元素之间才会交换位置,这就使得相同元素的相对位置在排序之前以及排序之后都是不变的 插入排序和冒泡排序一样也有一个极端的排序情况,但是冒泡排序的极端情况是最惨的情况,但是插入排序的极端情况就是最爽的情况.就是在序列已经基本有序的时候,插入排序是最快的,时间复杂度可以达到O(n)即线性级别

    49560发布于 2021-01-21
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    这一篇文章真的耗费了我巨大的时间和精力,由于 堆排序是基于二叉树 的,所以写的篇幅比较大并且由于是关于树的,所以画图动态演示的工程量就进一步增加,其次就是因为计数排序,桶排序以及基数排序并不是基于比较的 到这里堆排序的基本思想也就已经基本讲解完毕了,接下来就是通过图来动态的演示一下堆排序的过程,这样能够让大家更好的理解堆排序: 这是第一轮堆排序: ) 第二次堆排序: ) 第三次堆排序: ) 接下来我们还是通过下面的图来动态演示一下基数排序的过程: 个位排序: 十位排序: 百位排序: 千位排序: 在了解完基数排序的基本思想之后,按照惯例我们还是来简单分析一下基数排序的特点 : 基数排序是稳定的,原因和桶排序以及计数排序的原因一样. 这个系数就是最大元素的位数K,所以时间复杂度应该是O(n*k) 空间复杂度 空间复杂度我们也可以看出来,主要就是取决于链表的数量以及序列元素的数量,所以空间复杂度为O(n+k) 到这里十大经典排序算法详解的内容就已经全部讲解完毕了

    79550发布于 2021-02-02
领券