首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    排序算法-上(Java语言实现)

    我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。...第二,冒泡排序是稳定的排序算法吗? 在冒泡排序中,只有交换才可以改变两个元素的前后顺序。...第二,插入排序是稳定的排序算法吗? 在插入排序中,对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出现元素的后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定的排序算法。...那选择排序是稳定的排序算法吗?这个问题我着重来说一下。答案是否定的,选择排序是一种不稳定的排序算法。...插入排序的算法思路也有很大的优化空间,我们只是讲了最基础的一种。如果你对插入排序的优化感兴趣,可以自行学习一下希尔排序。

    35220

    我们真的搞懂这些排序算法了吗?(一)

    例如上图,我们的数组中有两个相同的元素 4, 我们分别用不同的排序算法对其排序,算法一排序之后,两个相同元素的相对位置没有发生改变,我们则称之为稳定的排序算法,算法二排序之后相对位置发生改变,则为不稳定的排序算法...第二次排序中,我们使用稳定的排序算法,所以经过第二次排序之后,年终奖相同的职工,仍然保持着红豆的有序(相对位置不变),红豆仍是从小到大排序。我们使用稳定的排序算法,只需要两次排序即可。...上述情况如果我们利用不稳定的排序算法,实现这一效果是十分复杂的。 比较类和非比较类 我们根据元素是否依靠与其他元素的比较来决定元素间的相对次序。...主要是这个排序算法思路最简单,也最容易理解,(也可能是它的名字好听,哈哈),学过的老哥们也一起来复习一下吧,我们一起深挖一下冒泡排序。...但是我们交换后发现,两个相等元素 3 的相对位置发生了改变,所以简单选择排序是不稳定的排序算法。 ?

    45310

    【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆、冒泡、快速、归并、计数以及非递归快速、归并排序)

    一、直接插入排序 稳定性分析 (1)稳定性指的是在排序过程中,两个相等的元素在排序后的相对位置不会发生变化,直接插入排序是稳定的排序算法 (2)在排序过程中,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描...end--; } else { break; } } arr[end + 1] = tmp; } } 二、希尔排序 稳定性分析 (1)希尔排序是不稳定的排序算法...这种交换操作可能会破坏相同元素之间的原始顺序,因此直接选择排序不是稳定的排序算法 时间复杂度: (1)最优情况:O(n^2)(无论输入序列如何,都需要进行n-1次选择操作,每次选择都需要遍历剩余未排序部分...) (2)最劣情况:O(n^2)(同最优情况,因为每次选择都需要遍历剩余未排序部分) (3)平均情况:O(n^2)(同最优和最劣情况,因为直接选择排序的时间复杂度不依赖于输入序列的具体分布)...(2)最劣情况:O(n log n) 即使在最劣情况下,即每次合并操作都是将一个长度为1的子数组与一个长度为n-1的子数组合并,递归深度仍然为log n,每层递归仍然需要处理n个元素,因此时间复杂度仍然为

    7310

    详解选择排序算法

    基本思想 选择排序的思想是: 给定一个数组arr,其长度为n; 第一次从 arr[0] 到 arr[n-1] 中选取一个最值(按照需求,可以是最大值,可以是最小值,下同)与arr...[0]进行交换; 第二次从arr[1] 到 arr[n-1] 中选取一个最值与arr[1]进行交换; 以此类推,直到arr[n-2]到arr[n-1]中选出最值交换后即完成排序...稳定性 选择排序是不稳定的排序算法。 举个例子来说明: 序列 6 9 6 3 10 在第一趟排序时第一个6会和3交换位置,那么原序列中两个6的相对前后顺序就被破坏了。...所以选择排序是一个不稳定的排序算法。 欢迎关注 欢迎大家的关注 扫描下方的二维码或者微信搜一搜即可关注我的微信公众号:code随笔 微信公众号:code随笔

    76510
    领券